FlowParse
Guide 9 August 2026 18 min read

How to reconcile stock purchases to invoices

Six steps, in an order that matters: collect the documents, extract the lines, normalise the units, match by product, investigate the differences cheapest-first, and close the period. With a worked example, a table for reading each kind of difference, and the mistakes that make people abandon the exercise halfway.

FlowParse
flowparse.io

Overview

The order of these steps is the method. Each one removes a class of explanation for the differences that remain, so the residual shrinks and becomes more meaningful as you work down. Doing them out of order — investigating price differences before checking whether all the documents are present, say — produces hours of work on a difference that was a missing credit note all along.

The guide assumes supplier invoices arrive as PDFs and scans rather than as structured data, which is the normal situation outside large retailers. It also assumes you have some form of goods received record. If you do not, that is the first thing to build, because the whole exercise depends on the second of the three records existing.

One scope note. This is about the purchase side of stock: what you bought, what arrived, what it cost. It is not a stock take, not a valuation policy, and not a substitute for physical control. What it does is remove the documentary part of a stock difference so that whatever is left is genuinely physical.

Before you start

Have readyWhy it matters
A list of suppliers used in the periodA forgotten supplier is a difference you cannot explain from the documents you have
Goods received notes with counts on themA signature is not a count, and no tool can supply the missing number
Your unit conversions per productCases versus singles is the most damaging silent error
Last period's closing stock valueThis period's opening value, and the anchor for everything
An agreed materiality thresholdWithout one the exercise expands until it is abandoned

The threshold is the one people skip, and skipping it is why first attempts at this fail. Reconciling every line to the penny on a few thousand purchase lines is not a monthly process, it is a project — and abandoning it halfway leaves a half-reconciled month that is worse than an unreconciled one, because it looks like it was done.

The six steps

1 · Collect the documents, and list them first

Before extracting anything, establish what should exist: which suppliers were used, which invoices belong to the period, which credit notes relate to them, and which goods received notes were raised. A list on a page is enough.

The reason to do this before touching the numbers is that a missing document produces a difference which cannot be resolved by examining the documents you have. People spend hours on a price variance that turns out to be a credit note sitting in someone's inbox, and the only defence is knowing what is absent before you begin.

Credit notes deserve specific attention here. They arrive detached from the invoice they correct, sometimes weeks later, and nobody chases you for them — so they are missed by default rather than by accident. Check the supplier statement if you have one; it is the fastest way to see what they think they have sent you.

2 · Extract the lines, not the totals

Every invoice row becomes a record: product, code, quantity, unit of measure, unit price, line total. Totals are useless here — two invoices with identical totals can describe entirely different deliveries, and only one of them matches your shelves.

Check the line sums against the document totals as you go. When the lines add up to the invoice total, the rows are almost certainly complete and correctly read. When they do not, either a line was misread or the invoice contains something the lines do not explain — and finding that out now is far cheaper than finding out after the figures are in a valuation. Our quantity extraction page covers what comes out of each row.

FlowParse
flowparse.io

3 · Normalise the units before comparing anything

If the invoice says 24 cases and your system counts singles, the two numbers cannot be compared until one is converted. This sounds obvious and is skipped constantly, because the numbers look comparable — they are both quantities, after all.

Use a conversion recorded once per product, kept in your own lookup, rather than one inferred per invoice. An inferred multiplier is applied consistently and silently in the same direction every time, which makes it worse than an obvious error: it produces a plausible number that is wrong for as long as nobody checks.

Where the pack size only exists inside the product description — Widget 6x500ml — derive it once for that product code and reuse it. Descriptions repeat almost exactly between invoices from the same supplier, so this work compounds instead of recurring.

4 · Match by product, working down by value

Group the invoiced quantities and the received quantities by product and put them side by side. Match on product code where one exists; descriptions drift between invoices for the same physical item and will split one product into two.

Then sort by value and work down. The top fifth of lines usually carries most of the value, and a difference on a low-value line rarely justifies the time it takes to explain. This is where the materiality threshold earns its keep — it converts an open-ended task into a finite one.

Keep an eye on the cumulative view as well as the individual one. A product that is short by two units on every one of twelve deliveries is a systematic problem worth finding, and each individual difference is small enough to fall under any sensible threshold.

5 · Investigate differences in the cheapest order

There is a right order, and it is the order of how cheap each check is relative to how often it is the answer.

Missing documents first. Seconds to check against your list, and the most common single cause.

Unit mismatches second. A difference that is exactly six or twelve times the expected figure is not a delivery problem, it is a conversion problem.

Quantity differences third. Now that units agree, invoiced versus received is a real comparison — short delivery, split shipment, or a miscount at the door.

Price differences fourth.Sort the product's history by date and the change is visible with the invoice it appeared on.

Freight treatment last. Usually not an error at all but an inconsistency, and one that affects comparability rather than the total.

FlowParse
flowparse.io

6 · Close the period deliberately

Three things, and then it is finished. Accrue the goods received but not invoiced, because the stock is physically there and no cost has been recorded. Record the unresolved differences with amounts rather than absorbing them. And write down the freight treatment you applied, so next month is consistent with this one.

That last point is the one that compounds. Freight capitalised this month and expensed next month makes the two months incomparable, and nobody will remember which was which. A line in a note costs nothing and settles the question permanently.

Reading a difference by its shape

Most differences declare their own cause if you know what to look at. The shape of the number is usually enough to classify it before any investigation starts.

What you seeMost likely causeFirst check
Exactly 6× or 12× outUnit conversion, not deliveryThe stated unit on the invoice
Whole product line missingDocument not collectedSupplier statement for the period
Small shortfall, one deliveryShort delivery or miscountThe goods received note count
Same small shortfall repeatedlySystematic — pack size or a habitSeveral deliveries of that product
Quantity agrees, value differsPrice change or discountThat product's price history by date
Value differs by a round amountFreight treated differentlyWhether carriage is a line or included
Stock exists, no cost recordedReceived not invoicedReceipts without a matching invoice
Negative difference on one productCredit note not appliedThe returns file

The fourth row is the one worth hunting deliberately. A recurring small difference is worth more than a single large one, because it will keep happening — and it is the one most likely to be dismissed as noise.

Worked example: one month, one supplier

A drinks distributor, one month, a single supplier with eleven product lines. The stock ledger shows a value 4,180 higher than the purchases appear to support, and the instinct is to blame the warehouse. Here is what it actually was.

FindingValueCauseAction
Credit note not applied2,340Returned pallet, credit filed not postedPosted — stock and value reduced
Case/single conversion wrong1,410New product set up as singlesConversion corrected in the lookup
Freight capitalised inconsistently290Two of five deliveries itemisedPolicy written down, applied to all
Short delivery never logged185Signed for without countingCredit claimed, receiving process changed
Price rise from the 14th−45Supplier increase, correctly invoicedSelling price reviewed
Unexplained residual0None

Nothing in that table is warehouse loss. Two documentary errors account for nine-tenths of it, and both were sitting in a folder. The short delivery is the only one involving anything physical, and it was a receiving process problem rather than a stock problem.

Note also the price rise, which is the smallest number and arguably the most valuable finding. It was correctly invoiced and correctly paid; what was wrong was the selling price, which had not moved. Left undiscovered it would have quietly reduced margin on that product for the rest of the year, and no stock reconciliation would ever have flagged it — only the price history did.

Goods received but not invoiced

This is the item that distorts a period end most, and it is structurally guaranteed to exist: goods arrive on the 28th and the invoice arrives on the 4th. The stock is physically yours; the cost has not been recorded anywhere.

Left alone, stock is right and cost of sales is understated, so margin is flattered — and the correction lands in the following period, where it looks like a cost overrun that nobody can explain. It is the single most common reason a monthly gross margin figure bounces around for no operational reason.

Comparing receipts against extracted invoices for the period surfaces the list directly: receipts with no matching invoice. Value them at the purchase order price or the last known price, accrue them, and reverse the accrual when the invoice arrives. Your accountant will ask for exactly this list, so producing it as part of the reconciliation rather than as a separate request saves a round trip.

The mirror case is worth a sentence: an invoice received for goods that have not arrived is a prepayment, not stock. It shows up as an invoice with no matching receipt, and treating it as stock overstates what you hold — which matters more than it sounds, because it is the error that survives a stock count.

Cut-off: the date that decides which period a purchase belongs to

Every purchase has at least three dates attached — invoice date, delivery date, and the date it was entered — and they routinely fall in different periods. Which one governs is a policy question, and the answer for stock is the delivery: the goods became yours when they arrived, not when the paperwork was raised.

That means a December invoice for a January delivery is not December stock, and a December delivery invoiced in January is. Both are entirely normal and both are commonly recorded on the invoice date, because that is the date the accounting system asks for.

The practical defence is to reconcile the days either side of the period end deliberately rather than trusting the default. It is a small list — a few days of deliveries — and it accounts for a disproportionate share of period-end stock differences. Write the policy down once, because this is precisely the kind of question that gets answered differently each quarter by whoever happens to be doing it.

FlowParse
flowparse.io

Doing this before a stock take

A physical count produces a single difference against the ledger, and that difference has four possible sources: purchases, sales, wastage and loss. Most businesses investigate the last two, because those are the interesting ones, and assume the first is fine.

Reconciling purchases first is worth doing precisely because it is the side nobody suspects and the only one that can be settled with documents rather than judgement. If the buying side explains a third of the variance, that is a third you no longer need to attribute to anything else.

It also changes the conversation. Presenting a warehouse team with an unexplained shortfall invites defensiveness; presenting them with a shortfall where the documented purchases have already been accounted for is a different meeting, and a considerably shorter one.

Timing matters: do the reconciliation and close it before the count, not alongside. Running both at once means every difference has two possible explanations and neither can be eliminated.

Setting a threshold you will actually keep

The threshold is the difference between a monthly process and an abandoned one, and it is the step most often skipped because it feels like giving up on accuracy. It is the opposite: an unbounded task gets abandoned halfway, and a half-reconciled month is worse than an unreconciled one because it looks finished.

Two rules together work better than one. A single-line threshold catches the one big error; a cumulative threshold per product catches the small recurring one. Two units short on twelve deliveries falls under any per-line limit and is exactly the systematic problem worth finding.

Set it against your own numbers rather than a standard: something that leaves you investigating perhaps twenty lines a month is sustainable, and two hundred is not. Write it down, because the pressure every month is to lower it for the interesting-looking one and raise it for the tedious one, and both are how consistency dies.

Review it twice a year. As the process improves the number of exceptions falls, which means the threshold can come down without the workload rising — and that is the point at which reconciliation stops being a chore and starts finding things nobody expected.

What to hand to your accountant

Four things, and they answer almost every question that would otherwise return as an email a week later.

The reconciliation summary. Opening position, purchases, receipts, differences found and how each was resolved. One page.

The accrual list. Goods received not invoiced, valued and itemised. Your accountant will ask for this specifically, so producing it as part of the process rather than as a response saves a round trip every period.

Unresolved differences with amounts. Named and sized rather than absorbed. A difference you can describe is something a reviewer can accept; a difference you smoothed away has destroyed the evidence that a question existed.

The freight treatment note. One line stating what was capitalised and what was expensed. It takes seconds and it is the question that otherwise gets answered differently each quarter by whoever is doing it.

Keep the extracted purchase data alongside, with the source-file column intact. The summary explains the conclusion; the data lets someone verify it without going back to the supplier.

Making it recur rather than restart

The first month of this is genuinely harder than the tenth, and knowing that in advance is what stops people concluding it does not work. Most of the first month is building things that then persist: the conversion table, the product mapping, the supplier list, the threshold.

By the third month, the setup work is essentially finished and what remains is the analysis — which is the part with value in it. Businesses that abandon this almost always do so during month one, having attributed the setup cost to the ongoing process.

Two habits protect the routine. Extract as documents arrive rather than in a month-end batch, so the reconciliation is analysis rather than data entry. And keep last month's exceptions visible when you start this month, because roughly half of them recur — and a recurring exception is a process problem wearing the costume of a data problem.

It is also worth deciding in advance what would make you stop. A written condition — the residual is not falling, the investigations take longer each month, the exceptions are the same ones every time — turns a judgement into an observation. Processes without a stopping condition tend to continue on momentum long after the evidence has stopped supporting them, and a monthly routine that has quietly become theatre is worse than no routine at all, because it consumes the time that would have gone to something useful.

One last thing that repays the effort of writing down: the exceptions that recur. Roughly half of what you find in month two will be the same as month one, and the repeats are worth more attention than the novelties — a supplier who is short every time, a product whose unit is permanently ambiguous, a delivery slot where nobody counts. Those are process findings dressed as data findings, and fixing one of them removes a whole column of future work rather than a single line of this month's.

FlowParse
flowparse.io

Common mistakes

Starting with the numbers instead of the document list. Hours spent on a variance that was a missing credit note. Check what is absent first.

Comparing quantities before normalising units. The numbers look comparable and are not, and the resulting difference sends you looking in entirely the wrong place.

Matching on description rather than code. One product becomes two, and both look short.

No materiality threshold. The task expands until it is abandoned, leaving a half-reconciled month that looks finished.

Absorbing the residual. A difference forced to zero has removed the evidence that a question existed — and it is the question your accountant would have wanted.

Running it after the count. Then every difference has two explanations and none can be eliminated.

FlowParse
flowparse.io

Best practices worth adopting once

Count at the door and write it down. Every step here depends on the received quantity being real. A signature confirming that a lorry arrived is not a count, and nothing downstream can supply the missing number.

Keep one conversion table. One row per product, supplier unit to your unit, maintained as new products appear. It is the cheapest error prevention available.

Extract as invoices arrive. Monthly reconciliation is only cheap if the data already exists; otherwise the month absorbs the data work as well as the analysis.

Review the price history monthly. Not as part of the reconciliation but alongside it. Cost increases are only actionable while selling prices can still move.

Write down the freight policy. One line. It removes a recurring inconsistency that otherwise makes month-on-month product costs incomparable.

Start with step two

Extract one real supplier invoice free — no registration — and see the line-level data the rest of this method needs.

Frequently asked questions

Keep reading