· ConstructiveCore Team · Guides · 8 min read
Construction Purchase Orders: A Guide to Controlling Material Costs
Materials are your second-biggest expense after labor. Purchase orders are how you control them. Here's how to set up a PO process that prevents overbuying, catches pricing errors, and keeps your jobs on budget.
A purchase order sounds like paperwork. For a lot of contractors, that’s exactly what it is — a formality they skip because the supplier already knows what to send and the invoice shows up eventually.
Then a $14,000 materials bill lands on a job that was budgeted for $9,000. Nobody remembers who ordered what. The supplier says they shipped what was requested. There’s no paper trail to prove otherwise.
Purchase orders aren’t bureaucracy. They’re the single best tool you have for controlling material costs before the money is spent. The difference between contractors who consistently hit their material budgets and those who don’t almost always comes down to whether they use POs.
Why Material Costs Are Hard to Control
Labor is variable, but at least you can see it happening — people show up, work hours, and go home. Materials are sneakier:
- Over-ordering is invisible. An extra 10% on concrete or lumber doesn’t look like waste until you compare the invoice to the estimate.
- Price changes go unnoticed. The price you estimated three months ago may not be the price you’re paying today. Without a PO that locks in a number, you won’t know until the bill arrives.
- Multiple people order for the same job. The super orders from the field. The PM orders from the office. The vendor sends both shipments. Nobody catches the duplication until the invoice.
- Deliveries go to the wrong site. Without a PO tied to a specific job and location, materials end up where they’re not needed.
On a typical commercial project, materials represent 40-50% of total job cost. A 10% overrun on materials on a $500,000 job is $20,000-$25,000 — enough to wipe out the entire profit margin.
What a Purchase Order Actually Does
A purchase order is a commitment between you and a vendor: what you’re buying, how much, at what price, for which job, delivered where and when.
That’s it. But each piece does real work:
| PO Field | What It Prevents |
|---|---|
| Item description & quantity | Over-ordering, wrong materials |
| Unit price & total | Surprise invoices, price creep |
| Job/cost code | Costs assigned to wrong job |
| Delivery location | Materials sent to wrong site |
| Delivery date | Late deliveries that stall work |
| Approved by | Unauthorized spending |
When the vendor invoice arrives, you match it to the PO. If the invoice is higher than the PO amount, you catch it immediately. If items were added that weren’t on the PO, you know before you pay.
Setting Up a PO Process That Works
Step 1: Set a PO Threshold
Not every purchase needs a PO. A $40 box of screws from the hardware store? Probably not worth the overhead. A $4,000 lumber order? Absolutely.
Most contractors set a threshold between $250 and $500. Anything above that amount requires a PO. Anything below goes through petty cash or a company card with receipt logging.
The threshold should be low enough to catch meaningful spending but high enough that you’re not creating paperwork for every trip to the supply house.
Step 2: Define Who Can Create and Approve
This is where a lot of small contractors go wrong. Either everyone can order whatever they want (no control), or everything has to go through one person (bottleneck).
A practical structure for a 10-30 person company:
| Role | Can Create PO | Can Approve PO | Limit |
|---|---|---|---|
| Superintendent / Foreman | Yes | No | N/A |
| Project Manager | Yes | Yes | Up to $5,000 |
| Owner / Controller | Yes | Yes | Unlimited |
Field supervisors create POs from the job site. PMs approve routine orders. Large orders get escalated to ownership. This keeps things moving without giving up control.
Step 3: Require a Job and Cost Code on Every PO
This is non-negotiable. Every PO must be tied to a specific job and cost code. If someone creates a PO without this information, it should be rejected.
Why? Because a PO without a job code is a cost that can’t be tracked. It will eventually land in your accounting system as an expense, but it won’t flow into your job cost reports. You’ll know you spent $6,000 on drywall somewhere, but you won’t know which job ate the budget.
Step 4: Match Invoices to POs
When a vendor invoice comes in, the first step is matching it to a PO:
- PO exists, invoice matches — approve and pay.
- PO exists, invoice is higher — investigate the difference before paying. Was there a price change? Were additional items shipped?
- No PO exists — flag it. Someone bypassed the process. Find out why and decide whether to pay.
This three-way match (PO → delivery receipt → invoice) is the core of materials cost control. It takes discipline, but it catches errors and overcharges that would otherwise go unnoticed.
Step 5: Review PO Spending Against Budget
Weekly or biweekly, compare total PO commitments against the materials budget for each active job. This tells you something that invoices alone cannot: how much you’ve committed to spend, even if the bills haven’t arrived yet.
If your materials budget for framing is $18,000 and you’ve already issued $16,500 in POs with framing only 60% complete, you have a problem — and you know about it before the remaining invoices land.
Common Purchase Order Mistakes
1. Verbal Orders
“I called it in” is not a purchase order. Verbal orders have no record of price, quantity, or who authorized them. When the invoice doesn’t match expectations, there’s nothing to reference.
Even if you have a great relationship with your supplier, put it in writing. It protects both sides.
2. Creating POs After the Fact
Some contractors create POs after the materials have already been delivered — just to satisfy their accounting process. This defeats the entire purpose. A PO created after delivery is just a receipt with extra steps.
The PO needs to exist before the order is placed. That’s when it has the power to prevent problems.
3. Not Tracking Change Orders Separately
When scope changes add material requirements, those materials should go on a separate PO tied to the change order — not lumped in with the original material order. Otherwise, your original estimate looks like it was wrong when it may have been accurate. The scope changed, and your tracking should reflect that.
4. Ignoring Small Overages
A PO for $2,400 and an invoice for $2,550 — it’s only $150, so you approve it and move on. Do that twenty times across a job and you’ve leaked $3,000 in unquestioned overages. Small differences add up. Every variance should be explained, even if it’s ultimately approved.
5. No Approval Workflow
If anyone can issue a PO with no review, you don’t have a process — you have a suggestion. At least one level of approval is necessary for the system to work.
Connecting POs to Job Costing
Purchase orders are most powerful when they feed directly into your job cost reports. Here’s what that looks like:
- PM creates a PO coded to Job #1042, Cost Code 03 (Concrete), for $8,200 in materials.
- Your system shows $8,200 committed against the $9,500 concrete materials budget — 86% committed with the pour 70% complete.
- The invoice arrives at $8,350 (fuel surcharge added). The $150 variance is flagged for review.
- The job cost report now shows $8,350 actual against $9,500 budgeted — you’re in good shape.
Without the PO in step 1, you wouldn’t know about the commitment until step 3. That’s weeks of flying blind.
The best construction management platforms connect POs to job costing automatically. When a PO is created, the committed cost shows up in the budget. When the invoice is entered and matched, the actual cost updates. No manual reconciliation required.
When POs Come From the Field
One of the biggest friction points in construction procurement is the gap between field and office. A superintendent needs parts to keep a crew working. They can’t wait for someone in the office to create a PO, get it approved, and send it to the vendor.
This is where most PO processes break down — and where the right software makes a real difference.
In ConstructiveCore, a field tech can request parts directly from a work order. The system creates a real purchase order in accounting, links it back to the originating work order, and flags the work order as “Awaiting Parts” until fulfilled. No phone calls to the office. No duplicate orders. Full traceability.
The same flow works for materials on any job: a superintendent creates a PO from their phone, it routes to the PM for approval, and the vendor gets a clean order with job code, delivery location, and authorized pricing.
Getting Started
If you’re not using purchase orders today, start with three steps:
- Set your threshold. Pick a dollar amount — $250 or $500 — above which every order needs a PO.
- Require a job code. No PO goes out without a job and cost code. This is the habit that makes everything else work.
- Match before you pay. When an invoice arrives, compare it to the PO before approving payment. Flag any differences.
You don’t need perfect processes on day one. You need the habit of documenting what you’re buying, for which job, at what price, before the order is placed. Everything else builds from there.
Want to see how purchase orders connect to job costing and work orders in ConstructiveCore? Get in touch and we’ll walk you through it.