# Purchase order tracker for a small team

> For the full documentation index, see https://250highstreet.com/llms.txt

> Build a purchase order tracker in a SharePoint list: PO number, vendor, amount, status and dates, with views for open and late orders. No spreadsheet needed.

If you want a purchase order tracker, use one SharePoint list instead of an Excel file: one row per PO with PO number, vendor, amount, Status, approver and ordered, expected and received dates. Two views, Open orders and Past expected date, show what is late.

Exact names may differ on your screen. Microsoft's help pages are linked at the end.

This guide is about tracking orders after the decision to buy. If your pain is the waiting before a yes, see "[Purchase requests stuck waiting for approval: how to see them and move them](/guides/purchase-requests-stuck-waiting-for-approval/)". If you track events and their vendors, see "[Event vendor tracker: quotes, deposits and day-of contacts](/guides/event-vendor-tracker-sharepoint/)". This guide does not repeat those.

## Why purchase orders in sheets and email go wrong

A small team may start with a spreadsheet of POs. It works until two people edit it, or until an order lives only in an email thread. Then the same problems appear:

- Nobody can say in one look which orders are placed and which are still waiting for a yes.
- Two orders get the same PO number, or a number is skipped.
- An order is late, but no one sees it because the expected date is buried in a message.
- The person who ordered is away, and no one knows what was received.
- The sheet has a dozen copies, and each copy shows a different status.

A list fixes the main part of this. There is one place, one row per order, and the dates are in columns you can sort and filter.

## Excel file or list

This guide gives the columns to build and a header row you can paste. A shared Excel or Google Sheets file and a list can hold the same columns, so the difference is in how they are used.

- Excel or Sheets file: easy to start, but each copy can drift, and nothing stops a typo in Status.
- SharePoint list: one row per order, a Choice column for Status, and views that people open instead of copies of a file.
- Our advice, not a Microsoft rule: if you still want totals in Excel, export the list and add the sums there.

Header row to paste into row 1 of Excel, or to check against your list: PO number \| Vendor \| Amount \| Status \| Requested by \| Approver \| Order date \| Expected date \| Received date \| Invoice number \| Invoice date \| Invoice paid

## What you are building

- A list named "POs".
- Columns for vendor, amount, status, people and dates.
- An "Open orders" view, sorted by expected date.
- A "Past expected date" view that shows orders that should have arrived.
- An optional Power Automate flow that asks an approver to say yes or no.

## Step 1. Create the list

In SharePoint or Microsoft Lists, create a new blank list and name it "POs". Microsoft's help pages on lists explain how to start a list. Exact names may differ.

Use the Title column for the PO number, such as "PO-0001". You can rename the column to "PO number" in the column settings.

One way to start: decide your number pattern before the first row. A pattern like PO-0001 is easy to sort. SharePoint does not make the number for you in this setup, so the person who adds the row types it. If you want help with automatic numbers, see "[Auto-number ticket IDs in a SharePoint list](/guides/auto-number-ticket-ids-sharepoint-list/)".

## Step 2. Add the columns

Add these columns.

1.  Vendor: Single line of text. This is the business you are buying from.

2.  Amount: a Currency column. If you prefer, a Number column also works.

3.  Status: a Choice column with numbered choices so they stay in your order:

    - 1 Draft
    - 2 Approved
    - 3 Ordered
    - 4 Received
    - 5 Closed

    Set the default to 1 Draft.

4.  Requested by: a Person column. This is who asked for the purchase.

5.  Approver: a Person column. This is the one person who must say yes. Name one person, not a group.

6.  Order date: a Date column, date only.

7.  Expected date: a Date column, date only.

8.  Received date: a Date column, date only. Leave it blank until the goods arrive.

9.  Invoice number: Single line of text. Leave it blank until the invoice arrives.

10. Invoice date: a Date column, date only.

11. Invoice paid: a Choice column with 1 No and 2 Yes, default 1 No.

Columns 9 to 11 cover invoice tracking. If your tracker starts earlier, add a Requisition number column (Single line of text) and fill it from the purchase request when the PO is made. For the waiting before a yes, see the guide linked at the top.

The numbers in front of the Status choices are part of the choice text, so the names stay exact when you filter.

Why Status is a Choice and not free text: with a Choice, the words are exact when you filter and when a flow reads them. A typo such as "Recieved" cannot get in.

## Step 3. Enter your open orders first

Add a row for each order that is not yet closed. Leave closed orders in the old sheet for now. You can bring them in later if you need the history.

If your orders are in a sheet, you can bring them in with an import. See "[Import an Excel file into an existing SharePoint list](/guides/import-excel-into-existing-sharepoint-list/)". For the full move from a sheet, see "[Replace a spreadsheet tracker with a SharePoint list](/guides/replace-spreadsheet-with-sharepoint-list/)".

## Step 4. Build the Open orders view

A view is a saved way of looking at a list. You filter, sort and save it with a name.

1.  Create a new view and name it "Open orders".
2.  Sort by Expected date, oldest first.
3.  Filter Status to show 2 Approved and 3 Ordered. In the column header filter, tick both values. Tick 1 Draft too if you want drafts in this view.

One way to start: keep the view simple and let people read the Status column. A short view is easier to trust than a clever one.

## Step 5. Build the Past expected date view

This is the view you will open the most. It shows orders that should have arrived and did not.

1.  Create a new view named "Past expected date".
2.  Sort by Expected date, oldest first.
3.  Add a filter: Expected date is less than \[Today\].
4.  Add a second filter: Status is not equal to 4 Received.
5.  Add a third filter: Status is not equal to 5 Closed.

Microsoft says: "It is not possible to use the \[Today\] or \[Me\] filters when filtering using a column header." It adds: "You must use the classic view editor to filter columns using these keywords." So open the view, choose Edit current view, then scroll to Filters.

Our advice, not a Microsoft rule: set blank and "is not equal to" filters in the classic view editor too.

A calculated column cannot use today's date, because SharePoint blocks \[Today\] in formulas. This is why the late check lives in a view filter and not in a column.

## Step 6. Totals

Views can show totals for a column. Microsoft's pages give examples such as count, average, maximum and minimum. Open your view's Totals menu on the Amount column to see what your screen offers. If a sum is not offered, export the list to Excel and add the amounts there.

## Step 7. Add approval with Power Automate (optional)

You do not have to send approval messages yourself. Power Automate has an approvals feature. Microsoft says: "When you submit an approval in a flow, approvers are notified and can review and act on the request."

Here is one way to start. The names of actions may differ on your screen.

1.  In Power Automate, create an automated cloud flow that starts when an item is created in your POs list.
2.  Add the action Start and wait for an approval. Microsoft says this action "lets you provide the information that should be in the approval request and the approvers who will receive the request." Put the PO number, vendor and amount in the details, and put the Approver from the list as the person to ask.
3.  Add a Condition on the outcome. If the answer is Approve, use the SharePoint action Update item to set Status to 2 Approved. If the answer is Reject, set Status back to 1 Draft, or add a Choice such as 6 Rejected if you want to keep a record.
4.  In Update item, if the Title field is marked required, fill it with the Title from the trigger. Our advice, not a Microsoft rule.

Microsoft lists these approval types: Approve/Reject with everyone must approve, Approve/Reject with first to respond, Custom Responses with wait for all responses, Custom Responses with wait for one response, and sequential approval, where "Approvals are requested one at a time, in a specific order."

Microsoft also says an approver can respond "directly from an Outlook email, a Microsoft Teams adaptive card, or the Power Automate action center" if they have the right license. Microsoft's pages do not say which license your company has, so check with your admin.

Two cautions. The approvals feature saves its data in Microsoft Dataverse, and Microsoft lists a Dataverse database as a prerequisite. Microsoft says: "If you're using the default environment, you don't need to provision the Dataverse database." Ask your admin which environment you use. Also, a flow that sends an approval does not remind anyone who is slow. For the reminder, see "[Remind an approver who has not answered after two days](/guides/power-automate-approval-reminder-after-2-days/)". For the problem of approvals that vanish in inboxes, see "[Approvals lost in email: how to stop chasing sign-offs](/guides/approvals-lost-in-email/)".

## Step 8. A weekly list of late orders (optional)

A scheduled flow can send you the late orders once a week. This is optional.

1.  Create a scheduled cloud flow with the Recurrence trigger. Set Interval to 1 and Frequency to Week.
2.  Add the SharePoint action Get items for the POs list.
3.  In Advanced options, set Filter Query to a date range, not an exact match. For example: Expected_x0020_date ge 'START' and Expected_x0020_date lt 'TODAY' and Status ne '4 Received' and Status ne '5 Closed'. For TODAY use formatDateTime(utcNow(),'yyyy-MM-dd'), which Microsoft's Get items page shows. For START use formatDateTime(addDays(utcNow(),-365),'yyyy-MM-dd') to look back one year, and widen it if you keep older open orders. The text in quotes for Status must match the choice exactly, including the number.
4.  Set Top Count. Microsoft says: "The default item limit is 100." You can raise it up to the list view threshold of 5,000. Get items returns only 100 rows if you leave the defaults. Also open the action's settings and turn Pagination on. Microsoft says to enable Pagination when you work with lists of more than 5,000 items with a filter query.
5.  Add Send an email (V2) and list the PO numbers in the body.

Microsoft says that spaces in a column name are replaced with \_x0020\_ in these queries, which is why the example has Expected_x0020_date. If your column has no space, you write the name as it is.

For the full steps of this kind of flow, see "[Power Automate Get items stops at 100 rows: how to get them all](/guides/power-automate-get-items-only-returns-100/)".

## Who can see the list

A view is not security. A view only changes what is shown. Anyone with access to the list can open another view and see every row, including amounts. Microsoft says: "Giving people permissions to a site, group, or team gives them access to all site content." So if some people should not see amounts, do not rely on a view. Put the list on a site with a small membership, or ask your admin about other options. See "[Keep one column private (like pay or notes) in a shared list](/guides/hide-a-column-from-some-people-sharepoint-list/)".

## What to avoid

- Do not stop at the Get items defaults. You get 100 rows until you set Top Count and switch Pagination on.
- Do not put today's date in a calculated column. SharePoint blocks \[Today\] in formulas, so the late check lives in the Past expected date view.
- Do not let people type Status by hand. A numbered Choice keeps both the order and the spelling.
- Do not name a group as Approver. Name one person.
- Do not rely on a view to hide amounts. Views are not security.
- Do not skip your finance policy. This list records what you were told and what you did. It is not a finance system. Follow your finance policy for who may approve what, and for how long you keep records.
- Do not delete old orders to keep the list short. Set the Status to 5 Closed and filter them out of your views.

## Honest limits

This list records facts that people type. It does not check that a number is unique, that an amount is right, or that goods really arrived. It does not replace a signed agreement or your finance records. The approval flow asks a person and records the answer. It does not decide who is allowed to approve. If you buy in several currencies, split orders into line items, or must match invoices to receipts, the design needs more columns or a second list. Start with one kind of purchase and add more once the first works.

## 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](/guides/what-a-sharepoint-tracker-costs/)". 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](/portfolio/)

## FAQ

### Can I start from an Excel purchase order template?

Yes. Put the header row from "Excel file or list" in row 1. When more than one person edits, bring the rows into a list with the import guide linked in Step 3.

### Should I use Google Sheets or a SharePoint list?

A list gives one row per order, a Choice column for Status and saved views; a shared sheet can drift into copies.

### How do I track invoices with POs?

Add Invoice number, Invoice date and Invoice paid columns to the same list, as in Step 2.

### How do I link a purchase requisition to a PO?

Add a Requisition number column and fill it from the request when the PO is made.

### Why does my \[Today\] filter not work from the column header?

Microsoft says it is not possible to use the \[Today\] or \[Me\] filters from a column header; use the classic view editor.

## Sources

- [Microsoft Support, Use filtering to modify a SharePoint view](https://support.microsoft.com/en-us/office/use-filtering-to-modify-a-sharepoint-view-3d8efc52-0808-4731-8f9b-3dfaeacea3d4)
- [Microsoft Learn, Get started with Power Automate approvals](https://learn.microsoft.com/en-us/power-automate/get-started-approvals)
- [Microsoft Learn, In-depth analysis into Get items and Get files SharePoint actions](https://learn.microsoft.com/en-us/sharepoint/dev/business-apps/power-automate/guidance/working-with-get-items-and-get-files)
- [Microsoft Learn, Sharing and permissions in the SharePoint modern experience](https://learn.microsoft.com/en-us/sharepoint/modern-experience-sharing-permissions)
- [Microsoft Support, Create, change, or delete a view of a list or library](https://support.microsoft.com/en-us/office/create-change-or-delete-a-view-of-a-list-or-library-27ae65b8-bc5b-4949-b29b-4ee87144a9c9)

## Related guides

- [A work order tracker in SharePoint, without a spreadsheet](/guides/work-order-tracker-sharepoint/)
- [Purchase requests stuck waiting for approval: how to see them and move them](/guides/purchase-requests-stuck-waiting-for-approval/)
- [Catering order tracker in SharePoint](/guides/catering-order-tracker-sharepoint/)
- [Bakery order tracker in SharePoint](/guides/bakery-order-tracker-sharepoint/)
- [Scholarship application tracker](/guides/scholarship-application-tracker/)
- [Warranty tracker in SharePoint: end dates and receipts in one list](/guides/warranty-tracker-sharepoint/)

Source: https://250highstreet.com/guides/purchase-order-tracker-sharepoint/
