A purchase order tracking Excel template is a spreadsheet that shows what you ordered, when each order should arrive and whether the vendor has been paid. One row per PO holds the vendor, dates, status, total, amount paid and balance due.
It is a PO tracker template built as a workbook: one row per purchase order, holding the PO number, vendor, order and expected delivery dates, the total, and what has been received, billed and paid. Formulas compare those numbers and set a status for each PO, so nobody has to update it by hand.
Purchasing and finance teams use it once they raise more POs than they can remember. Procurement checks it to chase late deliveries, AP checks it before paying an invoice, and budget owners check it to see how much spend is already committed for the month.
Small and mid-sized teams often run their whole PO process from a purchase order tracker template like this. Teams with an ERP keep one as a working list of exceptions: late orders, part deliveries and invoices that don't match.
A unique code for each order, and the key every other tab looks up.
Picked from a drop-down list, so each supplier is spelled one way and totals add up.
When the PO was raised and when the vendor promised delivery, which drives the late flag.
Where the order stands, from open to part received, received or closed, colour-coded so problems stand out.
The value committed on the PO, which receipts and invoices are checked against.
Payments made so far, including part payments, and the cash still owed to the vendor.
Ready to use in Excel and Google Sheets. Fill it in, save it, reuse it.
An approved request becomes a PO with a unique number. Add it to the log the same day.
Email the PO to the vendor and ask them to confirm price and delivery date.
When goods or services arrive, log a goods received entry against the PO number.
When the invoice arrives, compare it to the PO value and the value received.
Once everything is received and invoiced, the status flips to Closed and the PO drops off the open list.
Start with eight columns: PO no., Vendor, Order date, Expected delivery, Status (drop-down), Total, Amount paid, Balance due. Add the receipts tab and formulas once you raise more than a handful of POs a week.
Everything else in the workbook reads from this tab. Never reuse a PO number and never split one PO across two rows; part deliveries go on the Receipts tab instead. Format the range as an Excel Table so new rows pick up the formulas automatically.
| PO no. | Vendor | Ordered | Expected | PO value | Paid | Balance due | Status |
|---|---|---|---|---|---|---|---|
| PO-2026-0412 | Brightline Software | 18 Aug | 05 Sep | 18,000.00 | 18,000.00 | 0.00 | Closed |
| PO-2026-0418 | Acme Office Supply | 01 Sep | 12 Sep | 2,400.00 | 1,600.00 | 800.00 | Part received |
| PO-2026-0425 | Northwind Logistics | 05 Sep | 20 Sep | 7,500.00 | 0.00 | 7,500.00 | Late |
| PO-2026-0431 | Kestrel Data | 10 Sep | 30 Sep | 9,600.00 | 0.00 | 9,600.00 | Received |
| PO-2026-0436 | Orbit Analytics | 22 Sep | 15 Oct | 12,000.00 | 0.00 | 12,000.00 | Open |
| Total | 49,500.00 | 19,600.00 | 29,900.00 |
Illustrative data as at 30 Sep 2026, not real vendors. In the download, received and invoiced columns sit between PO value and Paid.
Works in Excel and Google Sheets. Headers in row 1, data from row 2, formulas copied down. Columns I and K read the Receipts and Invoices tabs.
| Col | Header | Entry or formula | What it does |
|---|---|---|---|
| A | PO no. | Text, e.g. PO-2026-0412 | Unique key every other tab looks up |
| B | Order date | Date | When the PO was approved and sent |
| C | Vendor | Data Validation list from Vendors tab | Keeps vendor names spelled one way |
| D | Requester | Text | Who to ask when something is late |
| E | Cost centre | Drop-down | Feeds spend by department |
| F | Description | Text | What was ordered, in a few words |
| G | PO value | Currency | Total committed on the PO |
| H | Expected delivery | Date | Date the vendor confirmed |
| I | Received value | =SUMIF(Receipts!B:B, | Adds every goods received entry for this PO |
| J | Received % | =IF(G2=0, | Share of the order delivered; format as % |
| K | Invoiced value | =SUMIF(Invoices!B:B, | Adds every invoice logged against this PO |
| L | Open balance | =G2-K2 | Committed spend not yet billed |
| M | Status | =IF(AND(I2>=G2, | Closed, received, part received, late or open |
| N | Days late | =IF(I2>=G2, | Days past the expected delivery date |
| O | Match check | =IF(K2>I2, | Flags invoices that run ahead of delivery or the PO |
| P | Amount paid | =SUMIF(Invoices!B:B, | Payments made on this PO, including part payments |
| Q | Balance due | =G2-P2 | Cash still owed on the PO, billed or not |
| R | Payment overdue | =IF(COUNTIFS(Invoices!B:B, | Flags any unpaid invoice past its due date |
Status checks the strictest condition first, so a fully received and fully invoiced PO shows Closed even if it arrived late. Switch on three built-in features: Data Validation drop-downs for vendors, conditional formatting that marks Closed rows and overdue payments, and SUMIFS totals per vendor on the dashboard. For more on what to track and why, read the guide to purchase order tracking.
This tab works as a simple goods received voucher template: who received what, when and in what condition. Keeping receipts on their own tab means a PO delivered in three shipments still sits on one row in the log. It is also the evidence AP needs before paying.
| GRN no. | PO no. | Date | Received by | Value | Condition |
|---|---|---|---|---|---|
| GRN-0871 | PO-2026-0412 | 05 Sep | J. Patel | 18,000.00 | Accepted |
| GRN-0874 | PO-2026-0418 | 12 Sep | M. Okafor | 1,600.00 | Accepted |
| GRN-0879 | PO-2026-0418 | 12 Sep | M. Okafor | 0.00 | Rejected: damaged |
| GRN-0885 | PO-2026-0431 | 29 Sep | L. Chen | 9,600.00 | Accepted |
Illustrative entries. Acme's order is 2,400.00; one carton of 800.00 arrived damaged and was rejected, so it stays open.
| Col | Header | Entry or formula | What it does |
|---|---|---|---|
| A | GRN no. | Text, e.g. GRN-0871 | Receipt reference for audit |
| B | PO no. | Drop-down from PO Log!A:A | Links the delivery to its PO |
| C | Date received | Date | Feeds delivery lead time |
| D | Received by | Text | Person who checked the goods |
| E | Value accepted | Currency | Only what passed inspection; rejected goods = 0 |
| F | Vendor | =XLOOKUP(B2, | Pulls the vendor name from the PO log |
This is three-way matching in a spreadsheet: PO value, received value and invoiced value side by side. Put your tolerance and payment terms on a Settings tab so finance can change them in one place. Anything on Hold goes back to the requester before AP pays, and columns I to K track the due date and every payment.
| Col | Header | Entry or formula | What it does |
|---|---|---|---|
| A | Invoice no. | Text | Vendor's own number, your duplicate check |
| B | PO no. | Drop-down from PO Log!A:A | Every invoice must quote one |
| C | Invoice date | Date | Starts the payment terms clock |
| D | Duplicate? | =IF(COUNTIFS(A:A, | Same number on the same PO twice |
| E | Invoice value | Currency | Invoice total before tax |
| F | Received to date | =XLOOKUP(B2, | From the PO log |
| G | Variance | =SUMIF(B:B, | All invoices on this PO minus value received |
| H | Decision | =IF(G2>Settings!$B$1*XLOOKUP(B2, | Hold if billed exceeds received by more than tolerance |
| I | Due date | =C2+Settings!$B$2 | Invoice date plus payment terms in days, e.g. 30 |
| J | Amount paid | Currency | Payments made so far, including part payments |
| K | Payment status | =IF(J2>=E2, | Feeds the overdue flag on the PO log |
Illustrative figures and tolerance. Read how three-way matching works in AP.
The most useful number is committed spend: money already promised on POs but not yet billed. Budget owners rarely see it in the accounts, because nothing posts until the invoice arrives. Late POs come next, since every late order is a follow-up email waiting to be sent.
PO value by status from the sample log, 30 Sep 2026. Illustrative.
| Metric | Formula |
|---|---|
| Open POs (not closed) | =COUNTA('PO Log'!A2:A1000)-COUNTIF('PO Log'!M:M, |
| Late POs | =COUNTIF('PO Log'!M:M, |
| Committed spend not yet invoiced | =SUM('PO Log'!L:L) |
| Spend with one vendor | =SUMIFS('PO Log'!G:G, |
| Balance due to one vendor | =SUMIFS('PO Log'!Q:Q, |
| PO value by cost centre this month | =SUMIFS('PO Log'!G:G, |
| Invoices on hold | =COUNTIF(Invoices!H:H, |
| Payments overdue | =COUNTIF(Invoices!K:K, |
Most broken trackers fail the same way: a typo in a vendor name, a formula overwritten with a number, or a late order nobody noticed. These rules stop all three. They work the same in Google Sheets, under Data validation and Conditional formatting.
| Rule | Where | How to set it |
|---|---|---|
| Vendor drop-down | PO Log column C | Data > Data Validation > List, source =Vendors!$A$2:$A$200 |
| Status drop-down (manual version) | PO Log column M, if you set status by hand | Data > Data Validation > List, source Draft,Pending,Delivered,Complete |
| Closed rows in green | PO Log A2:R1000 | Conditional formatting, formula =$M2='Closed', green fill |
| Late orders in red | PO Log A2:R1000 | Conditional formatting, formula =$M2='Late', red fill |
| Overdue payments in red text | PO Log A2:R1000 | Conditional formatting, formula =$R2='Overdue', bold red text |
| Part received in amber | PO Log A2:R1000 | Conditional formatting, formula =$M2='Part received', amber fill |
| Lock formula columns | PO Log I:R | Unlock input columns, then Review > Protect Sheet |
| Auto-expanding rows | Every tab | Select the range and press Ctrl + T to make an Excel Table |
Use PO-YYYY-NNNN and never reuse a number, even for cancelled orders.
Set PO value to 0 and add Cancelled to the description, so the history stays.
Move closed POs to an archive tab after year-end so formulas stay fast.
A tracker is only as good as the requests feeding it. Spendflo handles intake and approvals first.
See how it worksRaised and sent, nothing received yet, still before the expected delivery date.
Nothing received and the expected delivery date has passed. Chase the vendor.
Some goods or services accepted, the rest still to come or rejected.
Everything accepted, waiting on the vendor's invoice.
Fully received and fully invoiced. No further spend should hit this PO.
| Measure | Formula |
|---|---|
| Lead time for one PO (days) | =MINIFS(Receipts!C:C, |
| Average lead time for a vendor | =AVERAGEIFS(S:S, |
| On-time delivery rate for a vendor | =COUNTIFS(C:C, |
Put the lead time formula in a new column S on the PO log. MINIFS finds the first receipt for the PO, so a part delivery counts as the start of fulfilment. If a vendor's average keeps rising, raise POs earlier or agree a firm delivery date in the PO terms.
Add the row the day the PO is approved, so committed spend is always current.
One receipt row per delivery keeps part shipments visible on the PO log.
Invoices without a PO number go back to the vendor before they reach the match tab.
Filter status to Late every Monday and email each vendor with the PO number.
Once a PO is closed, any later invoice against it is an exception worth checking.
Overwriting the SUMIF formula breaks the link to the receipts tab.
Two orders with one number make receipts and invoices land on the wrong row.
An invoice with no matching receipt should sit on Hold, however small it is.
Acme and Acme Office Supply become two vendors and your totals split.
Export open purchase orders from your accounting system or inbox and paste them into the PO log.
Fill the Vendors tab first so the drop-downs work, then tidy any name mismatches.
Enter deliveries already received so the status column starts out accurate.
Chase Late POs, clear Hold invoices and check committed spend against budget.
Acme Office Supply receives PO-2026-0418 for 2,400.00 of desk chairs. On 12 Sep, 1,600.00 is accepted and an 800.00 carton is rejected as damaged. Status shows Part received. Acme invoices 2,400.00, the match tab shows an 800.00 variance and marks it Hold until the replacement arrives. Illustrative figures.
Every part on this page, in Excel and Google Sheets, with the examples filled in.
Use the PO log and receipts tab only. One person can update both in ten minutes a week.
Add the invoice match tab and a tolerance, and give each cost centre owner a filtered view of the dashboard.
Add a renewal date column and a contract link, since most SaaS POs repeat each year and need a fresh approval.
Best for a single owner and large files.
Best when several teams log receipts.
One tab, 18 columns, no sample rows.
Spendflo has processed $3.7B in software spend, at 30% average savings for its customers.
See your savingsA PO tracker tells you which orders are late, which deliveries are partial and which invoices should not be paid yet. When the same problems keep appearing, the cause is usually upstream, in how purchases are requested and approved.
Quick answers to what people ask most about the purchase order tracking excel template.
Microsoft's template gallery has purchase order forms, which are the single order you send a vendor, but a tracker that follows every PO through delivery, invoicing and payment is a separate sheet. You can download this free tracker in Excel or Google Sheets and pair it with a PO form for the orders themselves.
Enter headers for PO number, vendor, order date, expected delivery, status, total, amount paid and balance due, press Ctrl + T to make a Table, then add Data Validation drop-downs for vendors and statuses. Add conditional formatting for closed and overdue rows and SUMIFS totals per vendor, or download the finished tracker above with all of it built in.
List the columns you need, enter headers in row 1, press Ctrl + T to make a Table, then add formulas for status and dates. Use Data Validation for drop-downs and conditional formatting to highlight late rows. If you would rather skip the build, download the finished template above.
Use one workbook for two jobs: a PO form to send each order, and a tracker that logs every PO with its delivery, invoices and payments. The download covers the tracking side, with SUMIF formulas that tie receipts, invoices and payments back to each PO number.
You can download a free PO tracker template from this page in Excel or Google Sheets. It includes sample data so you can see how each formula behaves before you replace it with your own POs.
Purchase orders
Contracts
Vendor management
Sourcing and RFx
Budgets and business cases
Procurement
Accounts payable
Purchasing
Software buying
Supply chain
Spendflo handles intake, approvals and purchase requests, including renewal POs, so every order starts complete. AP automation is coming soon.
Enter your work email and we'll unlock every format.
Didn't start, or need another format? Pick one below.
Google Sheets: upload the file to Google Drive, then open it with Google Sheets.