How to write a construction purchase order that actually protects the job
Most purchase orders in construction are written in a hurry: a super texts a list, somebody in the office types it into a PO, and it goes to the supply house with half the information missing. Then the gear shows up at the wrong gate on a Saturday, the invoice comes in 6% over the quote, and nobody can tell which cost code it belongs to. A good construction purchase order prevents all of that, and a good PO log tells you, at any point in the job, how much money you have committed that isn't in your job cost yet. The free template above gives you both.
What a construction PO is (and why "just call it in" costs money)
A purchase order is your written offer to buy specific goods or services at a specific price, delivered to a specific place by a specific date. Once the vendor accepts it, it is the document that controls price, quantity, and delivery. In construction it does three jobs at once:
- Price control. It locks the number from the vendor's quote. When the invoice shows up higher, the PO is how accounts payable knows to stop and ask why.
- Job cost. It carries the job number and cost code, so the cost lands in the right bucket the day it's committed — not weeks later when the invoice gets coded.
- Field logistics. It tells the driver where to go, who to call, when the gate is open, and whether there is a forklift on site.
Verbal orders skip all three. That's how you end up with a $2,000 restocking fee on a panel nobody approved, or a copper wire invoice that quietly includes a metals surcharge nobody agreed to.
What goes on the purchase order (field by field)
| Field | What to enter and why |
|---|---|
| PO # | Job-based and sequential, e.g. PO-2417-006. Never reuse a number. The vendor must print it on every delivery ticket and invoice. |
| Vendor | Legal name and remit-to address from the vendor's W-9, plus the inside-sales contact and account number. |
| Vendor quote # | The quote number and date the price came from. If the invoice doesn't match, this is your reference. |
| Ship to | Jobsite address, site contact and phone, receiving hours, gate, and laydown instructions. Most refused or misdelivered loads trace back to a blank ship-to block. |
| Required on site | The date you need it, not the date you'd like it. Pull it from your look-ahead schedule. |
| Job # / cost code | Header default plus a cost code on every line. One order usually spans several codes. |
| Line items | Quantity, unit, description, catalog or part number, unit price. Extension calculates. For engineered items (gear, fixtures, pumps, valves) write "per approved submittal" and the submittal number. |
| Tax status & rate | Taxable, exempt with certificate, separated contract, or tax included. Sales tax only calculates when the status is Taxable. |
| Freight / other | Delivery, fuel surcharge, pallet, cut or reel fees. Put them on the PO so they aren't a surprise on the invoice. |
| Payment terms / FOB | Net 30, 2% 10th prox, etc. FOB jobsite means the vendor owns the risk until it's on your site. |
| Authorization | Signed by someone within their approval limit. The vendor countersigns or confirms by email. |
PO terms worth printing on every order
You don't need two pages of boilerplate. You need a handful of terms that match how problems actually happen on a job. The template includes eight sample terms written in plain language: PO number on every document, no substitutions or price changes without a written revision, 24-hour delivery call-ahead during receiving hours, the right to reject damaged or non-conforming material, back-order notice within two business days, one invoice per PO with signed delivery tickets attached, certs and MTRs where the specs call for them, and tax-exemption handling. Edit them to match your company's standard terms, and have your attorney review whatever you print on a PO — the vendor's quote and acknowledgment often carry their own terms, and when the two conflict, the details matter.
The PO log: committed cost is the number that saves the job
Your job-cost report shows what's been invoiced. It doesn't show the $86,400 switchboard you released for fabrication two months ago that won't be billed until it ships. If you're only watching actuals, that cost code looks great right up until the invoice lands. The PO log fixes that by tracking every PO's commitment alongside what has been received and invoiced:
| Column | How it's calculated |
|---|---|
| Revised PO $ | Original PO $ + approved changes (+ or −). |
| Received not invoiced | Received to date − invoiced to date, never below zero. Accrue it at month-end. |
| Open commitment | Revised PO $ − invoiced to date, never below zero. Forced to 0 when a PO is Closed or Cancelled. |
| % invoiced | Invoiced to date ÷ revised PO $. |
| Over-invoice flag | Invoiced to date turns red when it exceeds the revised PO amount, and the summary counts how many POs are over. |
For a forecast you can trust: cost at completion = actual cost to date + open commitments + remaining uncommitted budget. Pair the PO log with the WIP schedule template and you'll stop getting surprised at month-end.
Receiving, three-way match, and closing a PO
- Receive against the PO. Whoever signs the delivery ticket counts it against the PO lines and notes shortages or damage on the ticket before the driver leaves. Take a photo.
- Three-way match. Accounts payable matches the PO, the signed delivery ticket, and the invoice. Quantity or price that doesn't match gets kicked back to the PM before it's paid.
- Update the log. Received to date from tickets, invoiced to date from AP. Do it weekly on active jobs.
- Handle back-orders in writing. A back-order that slips past your required date is a schedule problem — log it in Notes and in your three-week look-ahead.
- Close it. When everything's received, invoiced, and returns or credits have posted, mark the PO Closed. Cancel unused balances in writing so the vendor can't ship against them six months later.
Common PO mistakes
- Writing the PO after the invoice arrives. A PO written to match an invoice controls nothing. Issue it before the order.
- One cost code for the whole order. Your budget report ends up with $40,000 of "misc materials" and no idea which scope is over.
- No quote reference. When pricing is disputed you have nothing to point to.
- Blanket POs with no ceiling. A blanket PO for consumables or rentals still needs a not-to-exceed amount and an end date.
- Letting the log go stale. A PO log updated once a quarter is a historical document, not a control.
Material escalation and long-lead gear
Copper, steel, and electrical gear pricing can move between quote and ship date. If a vendor's quote includes an escalation clause (metals surcharge, "price in effect at time of shipment"), note it on the PO and in the log so the PM isn't blindsided. For long-lead items — switchgear, transformers, generators, large valves, air handlers — the PO date is often the date that controls your schedule. Log the promised ship date, follow up on it every week, and track the release-for-fabrication date separately from the PO date.
When to move beyond Excel
A spreadsheet PO log works for a few jobs and a single buyer. It breaks when multiple PMs issue POs, invoices arrive by email to three different inboxes, and the log never matches what AP has actually paid. Field PM issues POs from the job, matches vendor invoices against them, and rolls open commitments straight into the job budget, so committed cost, actuals, and forecast are always the same number. Start a free 30-day trial — no credit card required.
Related templates
- Bid leveling matrix — compare supplier quotes before you issue the PO
- Subcontract work order — for labor scopes, not material buys
- Change order template — when a PO change comes from an owner change
- WIP schedule template — roll committed cost into your month-end forecast
- Browse all free construction templates