GRNI reconciliation
GRNI — goods received not invoiced — is the accrual for what you have received but not yet been billed for. A healthy GRNI balance turns over every month. A growing one is not an accounting problem: it is a matching problem showing up on the balance sheet, and closing it at period end without fixing the cause guarantees it comes back.
Three different questions get called "GRNI"
Before anything else, work out which one you actually have. They have different answers:
- The accounting question — what is GRNI, where does it sit, how is it posted. This is a definition, and it is settled: a liability account holding the value of receipts awaiting their invoice.
- The operational question — our GRNI balance is large and old, and nobody can explain the lines in it. This is the one that keeps people up at night, and it is a reconciliation problem.
- The tooling question — what stops it accumulating in the first place. This is a matching problem, and the answer lives upstream of accounting.
The rest of this page is about the second and third. If you only need the definition: GRNI is the liability recognised when goods are received against a purchase order before the supplier invoice arrives, so the balance sheet reflects the obligation in the period the goods were received rather than the period the invoice happened to show up.
Why the balance grows and will not clear
In a working process, a receipt is booked, the invoice arrives, they match, and the GRNI line clears. The balance breathes in and out. When it only grows, one of four things is happening — and in practice it is usually all four at once:
| Root cause | What it looks like in the balance | Where to fix it |
|---|---|---|
| Quantity mismatch | A small residual per line that never clears — received 100, invoiced 98, two units stuck forever | Tolerance rules at matching, not journal entries |
| Description drift | Full-value lines that look completely unbilled although the invoice was paid | Matching logic that tolerates wording differences |
| Receipt against the wrong PO | Two errors: one line stuck open, another closed that should not be | Goods-in process at the dock |
| Invoice posted without the receipt reference | Cost hits twice — once accrued, once posted — and GRNI never releases | AP posting discipline; usually a workaround for a matching failure |
The pattern worth noticing: three of these four are created upstream of accounting. That is why GRNI clean-ups performed purely as journal entries reappear the following quarter. You wrote off the symptom.
What it looks like on one order
A single PO, one delivery, one invoice. Everything looks normal to everyone involved:
| Item | Ordered | Received | Invoiced | Stuck in GRNI |
|---|---|---|---|---|
| Corrugated boxes @ $1.20 | 500 | 500 | 500 | $0.00 |
| Stretch film @ $14.50 | 80 | 80 | 78 | $29.00 |
| Pallets @ $11.00 (invoice says "EUR pallet HT") | 60 | 60 | 60 | $660.00 |
| Packing tape @ $0.95 | 200 | 200 | 200 | $0.00 |
The invoice was paid in full and nobody complained. But $689 sits in GRNI, and the two lines are there for completely different reasons:
- $29.00 is a real two-unit shortfall between what arrived and what was billed. Small, genuine, and it will never clear on its own.
- $660.00 is not a discrepancy at all. The pallets were ordered, delivered and invoiced correctly — the invoice just called them something else, so the match failed and the full line value stayed accrued. That is a naming problem, not purchase order price variance.
That second line is the reason GRNI balances look absurd. Most of a bad GRNI balance is not money owed. It is failed matches wearing the costume of money owed. Which means the first job in any GRNI clean-up is separating the two, and the ratio between them tells you whether you have a supplier problem or a systems problem.
How to reconcile it
- Age the balance. Split by how long each line has been open: under 30 days, 30-90, over 90. Anything under 30 days is normal timing. Anything over 90 needs an explanation per line.
- Split by root cause, not by supplier. Use the four categories above. Sorting by supplier tells you where the volume is; sorting by cause tells you what to fix.
- Chase the genuinely unbilled. Lines where goods really arrived and no invoice ever came. Ask the supplier — this is real liability and often real money you will eventually be asked for.
- Re-match the false positives. Lines that were invoiced and paid but never matched. These need linking, not chasing. This is usually the largest bucket by value.
- Write off what is genuinely dead — small residuals below any sensible threshold, from suppliers you no longer trade with. Document the policy so it is a decision rather than a habit.
- Fix the upstream cause. Otherwise steps 1-5 become a quarterly ritual.
A GRNI ageing view worth building
Per line: PO number, supplier, item, received quantity and value, invoiced quantity and value, difference, days open, and the exception type. Sorted by days open descending. If your ageing report shows only a total per supplier, it cannot tell you which of the four causes you have, which means it cannot be actioned.
How to stop it accumulating
GRNI is a downstream symptom. The lever is matching quality at the point the invoice arrives:
- Match line by line, not on document totals. A total-level match cannot tell you which line stayed open, so the residual lands in GRNI unattributed — line-level invoice matching.
- Tolerate wording differences. The $660 line above is pure matching failure. Exact string matching on descriptions creates GRNI at industrial scale — matching when descriptions disagree.
- Set tolerances that actually close lines. A two-unit residual worth $29 should either clear automatically or raise an exception someone will action. Sitting open for two years is the worst of both.
- Record receipts against the right order at the dock. No downstream system can repair a receipt booked against the wrong PO.
- Make "received not invoiced" a visible state, continuously. Not a report someone runs at close. If it is only visible at period end, it is only fixable at period end.
Where ininvoice fits
ininvoice does not post journals and is not a replacement for your accounting system. It works on the layer above, where GRNI is actually created.
Every receipt line is tracked against its PO and against the invoices that arrive afterwards. Lines that are received and not yet invoiced are flagged as an explicit exception state — that state is your GRNI, visible continuously rather than discovered at close. Because matching is line-level and tolerates description differences, the "$660 pallet" class of false GRNI does not get created in the first place.
What this does not do: post accruals, produce your ageing schedule inside the GL, or replace period-end close. It reduces how much lands in GRNI, and makes what is there explainable line by line.
See how a single order creates GRNI
Load the example in the free checker and look at the "Not invoiced" lines — those are GRNI, at the moment they are created.
Open the checkerA note on terminology
The same balance travels under several names. GRNI and GRIR (goods receipt / invoice receipt, the SAP term) are the most common; you will also see goods received not invoiced written out, accrued purchases, and uninvoiced receipts. UK finance teams tend to say GRNI and manage it alongside the purchase ledger; US teams more often say accrued liabilities and treat it as a subset. Same reconciliation either way.
Frequently asked questions
- What is GRNI?
- Goods received not invoiced: the accrual for stock or services received against a purchase order where the supplier invoice has not yet arrived or has not yet been matched. It is a liability, because you owe the money even though no invoice has been posted.
- Why does our GRNI balance keep growing?
- Because receipts are being recorded but invoices are not clearing them. The usual causes are quantity mismatches leaving small residuals, description differences that break the match on full-value lines, receipts booked against the wrong order, and invoices posted without reference to the receipt. Three of the four originate before accounting sees anything.
- Is GRNI the same as accrued liabilities?
- GRNI is a specific type of accrued liability. Accruals cover any expense incurred but not invoiced; GRNI covers only the part backed by a recorded goods receipt against a purchase order — which is what makes it reconcilable line by line rather than estimated.
- What is a normal GRNI balance?
- There is no universal benchmark, and any figure quoted as one should be treated with suspicion — it depends on volume, payment terms and how quickly your suppliers invoice. The meaningful test is not size but ageing: a balance that turns over within normal invoicing lead times is healthy at almost any size, and a balance with lines open past 90 days is not, however small.
- Is GRNI the same as GRIR?
- Yes, in substance. GRIR (goods receipt / invoice receipt) is the SAP name for the same clearing account. Teams on SAP say GRIR; most others say GRNI.
- Can we just write off old GRNI at year end?
- You can, and sometimes it is the right call for genuinely dead residuals. But if the balance is largely failed matches rather than real unbilled liability, writing it off removes the evidence without removing the cause, and it rebuilds. Categorise before you write off.
Related reading
- Invoice matching software
- Invoice reconciliation software
- Three-way matching: complete guide
- Invoice exception management
- Matching when descriptions do not agree
- Free invoice matching checker
- Three-way matching Excel template — the free spreadsheet, with a status for lines received but not invoiced
Stop creating GRNI you cannot explain
ininvoice matches every supplier invoice against your POs and goods receipts line by line, so received-not-invoiced is a live exception you can action, not a balance you discover at close.
Get started49 EUR/mo · up to 200 documents/month · no commitment · no implementation fee