Accounts payable

Vendor Statement Reconciliation in NetSuite: A Practical Method

Vendor statement reconciliation has an unfortunate reputation: tedious, low-yield, and — done the usual way — the leading cause of duplicate payments. The problem isn't the task. It's that almost everyone does it in the wrong direction.

Revaion · Written for finance teams running NetSuite · 7 min read
The method in one line

Build your ledger position for the supplier first, from your own data. Then match the statement against it. Never work down the statement entering what looks missing — that is the single largest cause of duplicate payments in accounts payable.

Ask most AP teams about statement reconciliation and you'll get a slightly guilty answer. It's on the list. It gets done for the big suppliers, sometimes, when there's a quiet week. Nobody enjoys it and nobody can point to much that came of it.

That's a shame, because it's the only routine control that looks at your payables from the outside. Every other check you run interrogates your own records against your own records. A supplier statement is an independent second opinion, provided free, by the only other party who knows what you owe.

Why the usual method backfires

The standard approach goes like this:

  1. Statement arrives.
  2. Work down it line by line.
  3. For each line, search NetSuite for the invoice number.
  4. If it isn't found, enter it.

Step 3 is where it fails. You're searching on the supplier's reference format, against your own reference format, and those differ constantly — 4471 against INV-4471, a leading zero, a branch prefix your team strips on entry. The search returns nothing. The item looks missing. It gets entered.

It wasn't missing. It was recorded three weeks ago. You've now got two bills for one invoice, and because they have different references, NetSuite's duplicate check has no reason to object. As covered in detecting duplicate payments across subsidiaries, this workflow is the origin of more duplicates than every other cause combined.

The structural problem

Working down the statement makes the supplier's document the source of truth and your ledger the thing being tested. That's backwards. You are trying to find out what you owe. Your ledger should be the fixed position and the statement the thing being compared against it.

Invert the process

Four steps, in this order:

  1. Build your position first. Extract every open item for that supplier as at the statement date — bills, credits, payments, unapplied amounts — from NetSuite, before you look at the statement.
  2. Reconcile the totals. Your closing balance against theirs. If they agree, you're finished in ninety seconds. This happens more often than people expect and it's why the method is quick.
  3. Match on amount and date, not reference. Only when totals disagree. Amounts are unambiguous; references are a formatting lottery.
  4. Classify every remaining gap before entering anything at all.

Building your side with SuiteQL

This query produces your ledger position for a supplier as at a chosen date — the document you compare the statement against.

-- Purchase ledger position for one vendor as at a statement date.
-- Bills, credits and payments in one list, oldest first.
SELECT
  CASE t.type
    WHEN 'VendBill' THEN 'Invoice'
    WHEN 'VendCred' THEN 'Credit'
    WHEN 'VendPymt' THEN 'Payment'
    ELSE t.type END                          AS doc_type,
  t.tranid                                    AS our_ref,
  t.trandate                                  AS doc_date,
  t.duedate,
  BUILTIN.DF(t.currency)                     AS currency,
  ROUND(ABS(t.foreigntotal), 2)               AS doc_amount,
  ROUND(NVL(ABS(t.foreignamountunpaid), 0), 2) AS still_open,
  CASE WHEN NVL(ABS(t.foreignamountunpaid), 0) = 0
       THEN 'Settled' ELSE 'Open' END            AS status
FROM transaction t
WHERE t.entity   = /* vendor internal id */ 1234
  AND t.voided   = 'F'
  AND t.type     IN ('VendBill', 'VendCred', 'VendPymt')
  AND t.trandate <= TO_DATE('2026-07-31', 'YYYY-MM-DD')
  AND t.trandate >= TO_DATE('2025-08-01', 'YYYY-MM-DD')
ORDER BY t.trandate, t.tranid

Replace the vendor internal id and the two dates. Twelve months of history is usually enough — most statement differences are recent, and older ones will have surfaced on a previous statement.

Add this second query to catch the thing statements most often reveal, and which your own ledger will never tell you about on its own:

-- Vendor credits raised but never applied — money already agreed,
-- not yet drawn down. Across all vendors, largest first.
SELECT
  BUILTIN.DF(t.entity)                       AS vendor,
  t.tranid                                    AS credit_ref,
  t.trandate,
  BUILTIN.DF(t.currency)                     AS currency,
  ROUND(ABS(t.foreigntotal), 2)               AS credit_value,
  ROUND(ABS(t.foreignamountunpaid), 2)       AS unapplied,
  ROUND(CURRENT_DATE - t.trandate)           AS days_outstanding
FROM transaction t
WHERE t.type   = 'VendCred'
  AND t.voided = 'F'
  AND ABS(NVL(t.foreignamountunpaid, 0)) > 0
ORDER BY unapplied DESC

Run this one across all vendors before you reconcile anything. It takes seconds and frequently finds more than the reconciliation itself.

Matching, and what the gaps mean

With your position in one column and the statement in the other, match on amount first, date second, reference last. Amount is the only field both parties record identically.

In a spreadsheet this is a lookup on rounded amount within a date tolerance of about ten days. Most lines match immediately. What's left is the interesting part, and it is usually a dozen rows or fewer.

The five gap types

GapMeaningAction
On statement, not in ledgerEither a genuinely missing invoice, or one you hold under a different referenceSearch by amount and date before doing anything. Only enter if it truly isn't there.
In ledger, not on statementOften a duplicate you already created, or a bill the supplier hasn't issuedInvestigate. This column is where your own duplicates confess.
Credit on statement, not in ledgerThe supplier agrees they owe you money you never recordedClaim it. Uncontested and immediate.
Amounts differ on the same documentA price or quantity dispute, or partial credit applied one side onlyCompare against the PO. See the AP recovery audit method.
Payment shown, not allocatedYou paid; they haven't applied itSend remittance detail. Prevents them chasing a paid invoice.

Note that two of these five find money and one finds an error you made. The "in ledger, not on statement" column is uncomfortable but it's the most valuable single output of the exercise, because it's the only routine process that catches a duplicate before you pay it rather than two years afterwards.

The rule that prevents duplicates

Never enter an item from a statement without first searching your ledger by amount and date. Not by reference. If an item of that value exists within a few days of that date for that supplier, assume it's the same document until proven otherwise. This single rule eliminates most reconciliation-induced duplicates.

Which suppliers are worth doing

Reconciling every supplier every month is a poor use of a finance team. Prioritise on where differences are likely and material:

That's typically 25–40 suppliers in a mid-market business, which is a manageable monthly rhythm — and it will cover something like 85% of the value.

The honest limitation of doing this manually is that it only ever reaches the suppliers on your list. The unclaimed credit sitting with supplier 214, who you spend £40,000 a year with and never reconcile, stays unclaimed indefinitely. That's the argument for automating the ledger-position half of the work: not because the method is hard, but because the coverage is what actually determines the total.

Reconcile every supplier, not just the top twenty

Revaion Recover builds the ledger position for every vendor continuously, flags unclaimed credits and unrecorded invoices, and turns each difference into an evidenced claim.

Book a discovery call →

Reconcile every supplier statement, continuously.

Book a 30-minute discovery call. We'll walk through how Revaion reconciles supplier statements against your NetSuite ledger — and what the first reconciliation typically surfaces.

Or email [email protected]

We use your email only to reply to this enquiry. See our privacy policy.