This is about the invoice a supplier sent your HVAC or mechanical contracting firm for parts, equipment, or materials. It is not about the invoice you sent your end customer for a service call or a retrofit. The rest of this article assumes the bill in front of you is an incoming one — a vendor invoice from the wholesaler who sold you the motors, the controls, the rooftop unit, or the sheet metal — waiting in AP to be approved and posted.
To match HVAC supplier invoices to purchase orders means comparing each line on the bill — part number, quantity, unit price, and extended total — against what was originally ordered and what was actually delivered, before the invoice is coded to a job and posted. AP teams in HVAC and mechanical contracting firms run this check to catch overbilling, wrong-job postings, and mis-allocated freight that would otherwise distort job-cost reporting. Most practical discrepancies are not billing system glitches. They come from HVAC-specific exceptions: partial deliveries on motors or capacitors, backordered lines that arrive on a later invoice, freight added by the supplier that never appeared on the PO, and manufacturer part numbers on the bill that do not cleanly align with the PO description.
The reason this control earns a place in an HVAC contractor's AP workflow, rather than being collapsed into a quick glance before coding, is job-cost integrity. HVAC contractors live on job-level gross margins. An undetected $340 freight overcharge absorbed into a $12,400 rooftop-unit invoice does not blow up the month, but it erodes the reported margin on the job that received it — and if nobody catches it, the WIP report and the project manager's profitability update both carry that distortion forward. Multiply that across a stack of weekly supplier invoices and the numbers that feed board-level reporting stop being trustworthy.
Where PO matching sits in the HVAC AP workflow
A supplier invoice that arrives in AP runs through five distinct layers before it lands in the accounting system. The matching step is one of them, and the whole HVAC supplier invoice matching workflow only holds together when the other layers are understood as separate work.
Layer 1 — intake and extraction. The invoice arrives as a PDF, a scanned image, or an email attachment, and the first job is turning it into data the rest of the workflow can operate on: line items as rows, header fields as fields, totals that reconcile. Intake answers "what did the supplier send us and what does the invoice actually say?" Getting that right before anything else is the subject of a separate companion piece on how to extract HVAC supplier invoice line items to Excel, because the techniques for doing it well — whether manually, with a dedicated extraction tool, or by some combination — deserve their own treatment.
Layer 2 — PO, invoice, and delivery comparison. Once the invoice is in structured form, it can be compared. This is the matching layer. It answers one question: does the invoice agree with what was ordered and what was actually delivered? That comparison is what the rest of this article is about.
Layer 3 — exception handling. When the match does not clean up on its own — partial delivery, freight added post-order, price drift, UoM mismatch — someone has to make a decision. Approve the line, hold it, split it across POs, dispute it with the supplier, or wait for a later delivery or credit note. This layer has its own catalogue of decisions specific to HVAC supplier invoices, covered in its own section below.
Layer 4 — job-cost coding. Only after the line is matched does it get assigned to a job, a phase, and a cost code. Coding answers "which project does this cost belong to, and under what budget line?" Collapsing this into the match step is the most common way HVAC AP workflows lose job-cost integrity.
Layer 5 — ERP or accounting-system posting. The coded, matched invoice posts as a payable, updates WIP for the relevant job, and feeds into the month-end close. Posting answers "how does this land in the accounting system and in the project's profitability picture?"
Each layer's output is the next layer's input. Intake produces structured line data; matching produces verified lines; exception handling produces decisions on the lines that did not verify cleanly; coding produces job-and-cost-code attributions; posting produces the accounting record. When contractors collapse matching into coding — because AP is backlogged, or because the team has always done it that way — overcharges and wrong-job postings enter WIP before anyone has a chance to catch them.
The fields you're actually comparing, line by line
To match HVAC parts invoice to purchase order information, there is a specific, finite set of fields under comparison. Naming them explicitly is what separates a real match from a glance-and-approve.
Part number. On a typical HVAC supplier invoice, the line carries the manufacturer's part number — the SKU the supplier's own system uses. The PO, if it was written off a quote or a job materials list, often shows something else: an internal SKU from your own inventory system, or a free-text description like "Carrier 5HP condenser fan motor 208-230V." The match has to allow aliasing between those three forms. A strict string match on part number will fail most lines on a normal HVAC invoice, not because anything is wrong but because the three documents use three different names for the same physical part.
Quantity. Three numbers matter here, and they are not always the same: quantity ordered on the PO, quantity shipped on the delivery document, and quantity invoiced on the bill. A two-way match against only the PO misses the case where the supplier shipped 8 of 10 motors and invoiced for 10. The delivery evidence is what distinguishes "we got everything and they billed it right" from "they billed for what we haven't received yet."
Unit price. The PO locked in a unit price on the day it was cut. Supplier price books drift — quarterly updates, mid-year adjustments on copper-heavy parts, tariff pass-throughs. If the invoice shows a different unit price than the PO, that variance is a decision, not an error: within your firm's tolerance, approve; outside it, query the supplier. The match step surfaces the variance; the exception-handling layer makes the call.
Extended total. This is quantity times unit price, per line. Suppliers occasionally bill a line with a calculated extended that does not equal the shown unit price times the shown quantity — a manual override, a rounding quirk, or a quote-specific price that did not make it onto the line as a unit figure. Checking the arithmetic per line takes seconds and catches a category of error nothing else catches.
Line-level tax. Where suppliers break tax out at the line level, it has to reconcile to the pre-tax extended and the applied rate. For Canadian contractors, this is where GST and HST split visibility starts to matter; the practicalities of that sit in their own section below.
Freight. Freight is the field most likely to be on the invoice and absent from the PO. The supplier added it after the fact, or the terms of the relationship allow the supplier to bill freight against the shipment regardless of whether the PO anticipated it. Treat freight as its own match-or-decide field, not as part of the line it is attached to.
Delivery date. The invoice shows a shipped-or-delivered date for each line or for the shipment as a whole. That date determines which delivery document the line matches against — the one that arrived this Tuesday, or the one that is still outstanding. Lines invoiced ahead of delivery should be held, not matched on the strength of the PO alone.
For readers who want the conceptual background on two-way, three-way, and four-way matching as a framework, the companion article on 2-way, 3-way, and 4-way invoice matching explained lays that out in full. In short: a two-way match compares the invoice to the PO; a three-way match adds delivery evidence; a four-way match adds an inspection or receiving-quality step. HVAC supplier invoice matching almost always needs the three-way form, because freight and quantity mismatches are specifically the things a two-way match cannot see.
One practical implication worth stating plainly: the comparison is always per-line and per-invoice-total. Every line can reconcile individually and the invoice total can still be wrong, because freight was added at the footer, or tax was applied against a base that does not match the summed line extendeds, or a credit appeared on the bill that was never identified as a line. Both levels have to agree before the invoice moves.
What delivery evidence actually looks like at a mechanical contractor
Textbook three-way matching assumes a goods-received note created at a receiving dock by someone whose job is to create goods-received notes. At a 5-to-50-person mechanical contractor, that dock does not exist. Parts are delivered direct to a jobsite, or to a small yard behind the shop, or sometimes straight into the back of a service van. To match supplier invoice to delivery receipt HVAC-side, the question is not "is there a GRN in the system?" but "what evidence do we actually have that what the supplier billed is what showed up, and where is it?"
The realistic evidence types are these:
- Supplier delivery receipt or packing slip, signed at the yard or the jobsite by whoever took the delivery. This is the most common piece of evidence and the closest thing to a formal receiving document most contractors have. It lists quantities and usually the supplier's part numbers.
- Driver sign-off on a bill of lading, for deliveries routed through a freight carrier rather than the supplier's own truck. The BOL often shows pallets or cartons rather than line-level parts, so it confirms that a shipment arrived but not always what was in it.
- Site photos from the foreman or project manager's phone — the rooftop unit on the pad, pallets of fittings staged in the mechanical room, the crate with its shipping label visible. Unglamorous but strong evidence for equipment deliveries where the piece of kit is identifiable on sight.
- Warehouse receipt, if the firm has a central stocking location and someone logs incoming parts against the PO when they hit the shelf. Some mechanical contractors have this discipline for stock items and not for direct-to-site deliveries.
- Foreman or project manager confirmation by email or text for parts that went straight to a site and did not pass through the yard. A message saying "got the two coils, pad is set, we're good" is evidence, even if it is not a form.
A formal goods-received-note system is the exception rather than the rule in this segment, and the match does not need one. What it needs is evidence that what arrived agrees with what the PO asked for. A signed packing slip plus a site photo is adequate for a routine motor or capacitor delivery. A split shipment or a damaged crate needs more: a follow-up note, a photo of the damage, a conversation with the supplier.
The comparison itself is narrow. The quantities on the delivery document have to agree with the quantities on the invoice line; the part numbers on the delivery document have to match the part numbers on the invoice line (allowing for the same manufacturer-vs-internal aliasing the fields section covered); and the delivery date has to be consistent with the invoice's shipped-or-delivered date. Where the delivery evidence covers only part of the invoice — the supplier sent 6 of 10 motors today and the other 4 are shipping Thursday — the matched lines go through, and the unmatched lines are held against the delivery evidence that will come with the Thursday shipment.
The pain point worth naming: at most contractors, the delivery evidence lives in five places at once. The signed packing slip is in a project folder on the controller's desk, the BOL is in a paper stack in the yard, the site photos are on a foreman's phone and may or may not get forwarded, the email confirmation is in whoever happened to be on the thread, and the warehouse log is a spreadsheet two people update. Whoever runs the match spends real time pulling that evidence together before they can approve a line. That is not a moral failing of the workflow; it is the reality of how deliveries happen at this scale. It also sets up why the rest of this article treats structured line data as the foundation the match layer rests on — without it, the effort of gathering evidence gets spent on lines that would have reconciled automatically if the data had been in a form the comparison could run against.
The HVAC exception catalogue: what actually breaks a match
Generic AP content treats exceptions as edge cases. On HVAC supplier invoices they are the substance of the job. Most weeks, most of the AP person's time is spent deciding what to do with the lines that did not clean up automatically. The catalogue below is what those decisions actually look like.
For almost every case below, three-way matching for HVAC supplier invoices is not theory — it is the minimum. The PO alone cannot tell you whether a line was actually delivered; the delivery alone cannot tell you whether the price on the bill matches what was agreed. Two-way matching misses freight overcharges on lines that otherwise reconcile. The exceptions force the three-way check.
Partial deliveries on motors, capacitors, or coils. The supplier promised 10 condenser fan motors, shipped 6 today, and invoiced for 6 on this bill. The PO is still open for the remaining 4. Decision: approve the 6 that arrived and reconcile against the delivery document; leave the remaining 4 lines on the PO open; expect a later invoice and a later delivery slip for the balance. A common error is forcing the full PO closed against a partial invoice and then having nowhere to put the subsequent shipment when it arrives.
Backordered lines on a separate later invoice. The 4 motors that did not arrive last Thursday ship the following week under the same PO number. The supplier issues a new invoice for them. Decision: match this second invoice's lines back to the same open PO lines, against the delivery slip that came with this shipment. The PO closes when the cumulative invoiced quantity equals the ordered quantity; do not treat the backorder invoice as unrelated to the original.
Manufacturer returns and credit notes for warranty parts. A coil supplied three months ago failed in the first 30 days; the supplier issues a credit note referencing the original invoice. Decision: match the credit to the specific original invoice line and — critically — to the job that was originally charged. A credit handled as a standalone transaction lands back in the GL as a general reduction against supplier cost, not as a reversal on the job that received the bad part. The job's profitability stays artificially low until someone notices.
Freight added post-order. The PO had no freight line. The invoice carries $340 of freight at the bottom of a $12,400 rooftop-unit bill. Decision: confirm whether the supplier agreement allows post-order freight for this shipment type; if yes and the amount is within the normal range for equipment of this weight, approve; if no, or if the amount looks out of pattern, query the supplier before the line is paid. The freight is its own match-or-decide; do not absorb it silently into the equipment line.
Price variance from supplier price-book drift. The PO locked a unit price of $2,340 on a 5-ton condensing unit three weeks ago; the invoice shows $2,385 because the supplier's quarterly price book rolled forward. Decision: against the firm's tolerance threshold — often a dollar amount or percentage band — either approve or query. A clear tolerance rule avoids arguing about each case individually; it also creates a visible trail when prices drift consistently in one direction over several months.
Unit-of-measure mismatches. The PO was written for 2 cases of copper fittings; the invoice bills 24 fittings (each). Decision: convert to a common unit before the match runs — 2 cases at 12 per case equals 24 each — and re-compare. Approving on a UoM-blind quantity match either treats a case as a single unit or a unit as a case, and the resulting cost variance is large enough to matter.
Restocking fees on returned parts. A control board shipped for a job was not the correct variant and went back to the supplier. The credit for the returned part carries a 15 percent restocking fee. Decision: match both the credit line and the fee against the original invoice and the job that received the part initially. The fee is a legitimate cost of the return; it belongs on the job, not in a general expense bucket.
One supplier invoice spanning multiple POs. The wholesaler consolidates shipments across three open POs — one for a commercial retrofit, one for a maintenance stock refill, one for a residential install — into a single weekly invoice. This is a distinct category of exception and the one most likely to cause mis-allocated cost when the match is rushed. Decision: split the invoice by PO before any matching runs; each slice then goes through the normal per-line checks against its own PO and delivery evidence. Forcing a consolidated invoice through as a single-PO match is how costs end up on the wrong job. The handling of one supplier invoice spanning multiple purchase orders is covered in more depth in the dedicated companion article.
What these cases share is a pattern: the exception is named, the evidence that resolves it is identifiable, and the decision the AP person makes is discrete. Where a contractor's match workflow weakens is usually not in any individual case — most of these are tractable one at a time — but in the absence of an explicit catalogue, so each exception feels like a first encounter and the decision gets made differently by different people each week.
GST and HST visibility at match time for Canadian HVAC AP
Canadian HVAC AP has one matching consideration that an American reader does not: GST and HST have to be separated from the extended pre-tax cost at match time, not deferred to posting. Every minute the combined figure is carried as cost, it risks inflating job-cost totals and distorting gross-margin reporting at job and phase level. The ITC claim is downstream work; the matching layer's job is making sure the pre-tax figure and the tax figure are each correct in their own right before the invoice moves.
What this looks like on the invoice stack is the variable-rate reality Canadian contractors already know. A single wholesaler shipping from a distribution centre in one province to jobsites in several provinces charges tax based on where the goods are shipped, so the same HVAC AP person can see 5% GST on a delivery to Alberta, 12% GST plus PST on a delivery to British Columbia, and 13% HST on a delivery to Ontario within a single week's bills — sometimes within a single invoice if the wholesaler consolidates. The match step has to verify the rate applied to each line or each shipment is correct for the ship-to province on the invoice date, not just that the arithmetic on the line reconciles against the rate shown.
The practical HVAC AP purchase order verification on the tax side is narrow: confirm the tax on each line (or at invoice level where the supplier does not break tax out by line) corresponds to a valid rate for the shipped-to province on the invoice date, and confirm the pre-tax extended is what flows to job-cost. If line-level tax is not shown, the invoice total has to be decomposed into pre-tax and tax components before coding. Skipping that decomposition is how GST ends up in a job's reported cost — never a large error per invoice, but systematic across a year's worth of bills, and visible in the gap between reported job margins and actual margins once the ITC recovery lands back in the GL.
Context for why this matters operationally: according to NAICS 23822 plumbing, heating and air-conditioning contractors data published by the Government of Canada, Canadian plumbing, heating, and air-conditioning contractors — the NAICS 23822 industry HVAC contracting falls under — had average small- and medium-sized-business revenue of $705,300 in 2024, with 78% of businesses profitable. Firms in that size band are large enough to run a real job-cost function and small enough that an AP clerk, bookkeeper, or controller is often the same person; the discipline of separating tax at match time is one of the specific controls that protects the pre-tax figures feeding job-cost from the noise that would otherwise accumulate across a year of invoices.
Why matching precedes coding, not follows it
Matching is a gatekeeper, not a rearguard cleanup. Once an invoice has been coded to a job and a cost code, any discrepancy caught later has to be rolled back through WIP, revised on the project-cost report, and sometimes explained to a project manager who has already reported job margins upward on the strength of numbers that were not actually right. Catching the same discrepancy at match time — before the line touches a job — is an edit in AP. Catching it later is an accounting reversal on a live project.
The cost of getting this order wrong in HVAC contractor terms is specific, not abstract. A wrong-job posting distorts two jobs simultaneously: the one that received the cost it should not have been charged, and the one that did not receive the cost it should have. Say a $1,150 set of refrigerant lineset materials shipped for a commercial retrofit gets coded against a residential install because an AP clerk coded first and the match was going to happen later and never quite did. The commercial retrofit's reported margin looks better than it is; the residential install looks worse. By the time someone chasing a job-cost variance at month-end finds the misposting, both project managers have already filed their updates on the wrong numbers, and the reversal becomes an accounting conversation rather than a routine AP edit. Mechanical-contractor job reporting only survives if the matching step actually runs in the right place in the sequence.
The practical objection is legitimate. Teams code first because it feels faster when AP is three days behind and the week-end close is Friday. The cost of coding first is not in the moment; it is in the month-end cleanup, the mid-close conversation where the controller asks the project accountant why the WIP line moved, and the slow erosion of trust in job-cost reporting once the operations side learns that numbers get revised after the fact. Once that trust is gone, the company-wide cost of restoring it is much higher than whatever time was saved in AP that week.
That is the real argument for HVAC AP purchase order verification as its own step: the verification is the matching, and the coding is the downstream action that depends on the verification being complete. Reversing the order means the downstream action runs against unverified data, and the verification becomes cleanup rather than control.
Once a line is matched, it is ready for the coding step, where it is assigned to the correct job, phase, and cost code. The mechanics of that step — how cost codes are structured, how phases map to job types, how to split a single invoice across multiple coding buckets — sit in the companion article on how to code construction invoices by job, phase, and cost code.
How structured extraction makes matching tractable at contractor scale
The workflow described above holds together on a whiteboard. Under weekly invoice volume from ten to thirty regular suppliers, it holds together only if the invoice is already in structured form before the matching starts. Every supplier has its own template, its own column layout, its own placement of freight and tax, its own way of showing partial deliveries and backorder references. Without structured line-item rows, every match is a manual re-read of the bill — eye-scan the part numbers, eye-scan the quantities, eye-scan the extendeds, copy the important bits into a spreadsheet, and only then begin comparing against the PO.
Matching is inherently a comparison operation: rows against rows. The PO is already row-structured. The delivery evidence is row-structured (or close enough — line items on a packing slip). The invoice, as delivered by the supplier, is not; it is a PDF laid out for a human reader. If the match workflow begins by hand-transcribing each invoice into rows, that transcription is where the workflow silently breaks under volume. An AP clerk can transcribe and match a handful of invoices cleanly; the same clerk on the same time budget cannot do it for forty invoices a week without errors creeping into the transcription, into the comparison, or into both.
The extraction layer exists to remove the transcription step. A prompt-based tool for matching HVAC parts invoices to POs and deliveries takes supplier invoices in any layout and returns structured rows carrying line items, part numbers, quantities, unit prices, dates, taxes with GST and HST split, and PO references. This is the step our own AI-powered supplier invoice data extraction tool handles, and it is the step that makes the rest of the matching workflow tractable at the volume HVAC AP actually runs.
In concrete terms, the interaction is one prompt field and a file upload. A user describes the extraction task in plain language — something like "I'm reconciling supplier invoices against purchase orders and delivery notes. Extract invoice number, invoice date, supplier name, PO number, and for each line: part number, description, quantity, unit price, extended total, and line-level GST/HST" — and the output lands as an Excel, CSV, or JSON file with one row per line item and the invoice-level fields repeated across that invoice's lines. No per-supplier template work is involved, which matters for an AP function that sees ten to thirty supplier layouts a week. Batches handle up to 6,000 files in a single job, which covers more HVAC AP volume than most mechanical contractors see in a quarter. Every output row includes a reference back to the source file and page, so when a disputed line on the match needs a second look, the AP person opens the original invoice at the exact page without hunting through an email thread.
The practical fit with the matching workflow is direct: the extraction output is the input to the comparison. Lines line up against PO lines. Quantities on the delivery evidence compare against invoiced quantities the same way. Freight is a named field, not a footnote to hunt for. GST or HST sits in its own column rather than embedded in a total. The AP person's work shifts from re-reading the invoice to making the decisions the article above is actually about — approve this line, hold that one, split this invoice by PO, query the freight with the supplier, match this credit back to the original job.
Two things the product does not do are worth naming plainly. It does not run the match itself; the matching logic, the decisions on each exception, and the coding of matched lines remain the AP team's workflow. And it does not replace the delivery evidence discipline — the packing slips, BOLs, site photos, and confirmations still have to reach the AP person who is running the match. What extraction changes is the shape of the invoice when it enters the workflow. That one change is what makes every other layer in this article operate at the scale an HVAC contractor's AP function actually runs at.
Extract invoice data to Excel with natural language prompts
Upload your invoices, describe what you need in plain language, and download clean, structured spreadsheets. No templates, no complex configuration.
Related Articles
Explore adjacent guides and reference articles on this topic.
Extract HVAC Supplier Invoice Line Items to Excel
Turn HVAC supplier invoice PDFs into Excel rows with line items, GST/HST visibility, and job-costing fields. Learn a cleaner review workflow.
How to Match Steel Mill Invoices to Goods Received
Match steel mill invoices to goods received at line level, catching grade, weight, partial shipment, freight, and surcharge variances before payment.
Construction Invoice Coding for Accurate Job Costing
Learn how construction teams code supplier invoices by job, phase, cost code, and line item so job-cost reporting stays accurate and approvals move faster.