Guides

How to reconcile GSTR-2B against your purchase register

Match every purchase invoice in your books to a line in GSTR-2B on supplier GSTIN and invoice number, claim the credit that matches, and work through what is left — because the statement, not the invoice in your file, is what decides the claim.

15 min read · 8 steps · 6 ways it goes wrong

What you need before you start

  • The GSTR-2B for the month you are claiming, downloaded from the GST portal. Take the JSON if you can — it carries the credit and debit note sections that a hand-made Excel summary usually loses. Do not use 2A for this: 2A keeps moving as suppliers file, 2B is generated once and then stands still, and only a statement that stands still can be reconciled.
  • Your purchase register for the same period: one row per invoice, with supplier GSTIN, invoice number, invoice date, taxable value, and IGST, CGST, SGST and cess as separate amounts. If your package exports a single "tax" column you will have to split it, because that is the column the differences show up in.
  • Last month’s unmatched list. You will need it. An invoice a supplier files late appears in a later month’s 2B, and if you start fresh every month it never gets matched at all.
  • Somewhere to record what you decided about every mismatch. The reconciliation is the working behind the claim. It is also the first thing anybody asks for if the claim is questioned, and it is very hard to reconstruct a year later.

Download the right statement for the right period

On the portal, GSTR-2B sits under Returns for the period you are claiming. Download it as JSON if the option is there. The JSON is structured, not formatted: the supplier’s GSTIN is a field called ctin, the invoice number is inum, the date is idt in day-month-year, and the amounts are txval, igst, cgst, sgst and cess.

What matters is which sections it holds. B2B is the ordinary invoice section. B2BA holds amendments — a supplier correcting an invoice they filed wrongly last month. CDNR holds credit and debit notes, and each note carries a type: a credit note reduces your credit, a debit note increases it. CDNRA amends those. Anything that reads only the B2B section will silently ignore every credit note your suppliers raised, and overstate the credit you think you can claim.

Excel works too, and the same reconciliation runs on it, but a downloaded Excel summary is a flatter document — check before you start that the credit notes are in it and that they are signed.

Get your purchase register into a shape that can be matched

One row per invoice, with these columns. The names do not have to be exact — Bill No, Supplier Invoice No, Party GSTIN and Taxable Amount are all recognised and every mapping is shown for you to correct — but the columns have to exist.

  • Supplier GSTIN. This and the invoice number are the key the whole reconciliation turns on.
  • Invoice number, as the supplier wrote it on the tax invoice.
  • Invoice date.
  • Taxable value, before tax.
  • IGST, CGST, SGST and cess, each in its own column. A single combined tax figure hides the most common error there is, which is an invoice taxed as intra-state by one side and inter-state by the other.

If the register lives in twelve files — one per branch, one per person who types — stack them into one sheet first. Columns are matched by heading, so the branches can have them in different orders.

The tool for this step: Merge & Dedupe Spreadsheets — stacks up to ten workbooks into one sheet, matching columns by heading, and lists every duplicate row it removes with the file and row it came from.

Check the GSTINs before you match anything

The match is keyed on GSTIN plus invoice number. A GSTIN that is wrong cannot match anything, ever — and the row will not look wrong. It will look like a supplier who has not filed, which is a different problem with a different remedy, and you will spend an afternoon chasing a supplier who filed on time.

A GSTIN carries a checksum in its last character, so most typing errors are catchable without going anywhere near the portal. Two characters swapped by a tired hand almost always fails the check. Run the whole column through the validator and fix the failures before you reconcile; it is thirty seconds against an afternoon.

The tool for this step: GSTIN, PAN, IFSC & ID Validator (Bulk) — checks a whole column of GSTINs for format and checksum and gives the reason for each failure, without looking anything up.

What a checksum cannot tell you is whether a GSTIN is real, active, or the right one for that supplier. Only the portal knows that. What it tells you is that this string could not be anybody’s GSTIN, which is enough to catch the transpositions.

Run the match

Drop the 2B on one side and the register on the other, check the column mapping the tool proposes, and run it.

The tool for this step: GSTR-2B Reconciliation — reads the portal’s JSON or an Excel export, matches it against your register, and returns the matched, the differing, the unclaimed and the unfiled as four separate lists.

It matches twice. The first pass is on supplier GSTIN plus a normalised invoice number: capitals, spaces, slashes and dashes are ignored, and a leading zero before a digit is dropped, so INV/2026/0042 and inv-2026-42 are the same invoice. The second pass takes what is left and looks for the same supplier, the same trailing number, a date within a few days and a taxable value that is close — which is how an invoice booked on the day it arrived rather than the day it was raised still finds its partner.

Everything else falls into one of four piles, and the piles are the point of the exercise.

Read the four piles

  • Matched. Same supplier, same invoice, and the tax agrees within a rupee. This is the credit you can claim without doing anything else.
  • Tax differs, or the taxable value differs. Matched to the right invoice, but the numbers disagree by more than rounding. Almost always a rate applied differently by the two sides, or freight and insurance included in one taxable value and not the other.
  • In 2B, not in your books. The supplier has reported an invoice you have not recorded. Either you have missed a purchase, or the invoice is not yours.
  • In your books, not in 2B. You hold an invoice the supplier has not reported. This is the pile that costs money.

The sizes tell you something before you read a single row. A large "in books, not in 2B" pile in month one is usually a column mapping problem or a GSTIN problem, not two hundred delinquent suppliers. A large "in 2B, not in books" pile is usually a branch whose purchases have not been entered yet.

Decide what to do with each row, and write the decision down

  1. Tax differs by a rupee or two: leave it. Rounding at the line level against rounding at the invoice level does this, and chasing it costs more than it is worth.
  2. Tax differs by a real amount: find out which side is wrong before you claim. If the supplier has charged CGST and SGST where the place of supply makes it IGST, the credit is not simply available and a corrected invoice is the remedy, not a journal.
  3. In 2B, not in books, and it is genuinely your purchase: book it. This is free money you were about to leave on the table.
  4. In 2B, not in books, and it is not yours: tell the supplier. Somebody has typed your GSTIN onto another customer’s invoice, and the credit sitting in your statement is not yours to claim.
  5. In books, not in 2B, and the supplier is one you buy from every month: it will very likely appear next month, because they filed late. Carry it forward and match it then.
  6. In books, not in 2B, and it has been carried forward for months: this is now a commercial conversation, not an accounting one. You have paid tax to somebody who has not passed it on.

Write the decision against the row, not in your head. The four lists download as a workbook with a column for exactly this, and next month you will want to know why you left a difference alone.

Claim what the statement supports, and keep the working

The claim you file is a figure; the reconciliation is the evidence for it. Keep the workbook with the return for that period, with the decisions in it. If you claim less than 2B allows because you have not booked an invoice yet, note that too — the difference between your claim and the statement is a question somebody may ask.

Carry the unmatched forward and chase the suppliers who caused them

Take the "in books, not in 2B" list, add it to last month’s carry-forward, and drop the combined list into next month’s reconciliation. An invoice that has been sitting there for three months with a supplier you still buy from is worth a phone call from somebody senior, with the invoice numbers and the amount in front of them.

Sort the carry-forward by supplier rather than by invoice before you make that call. One supplier with eleven unfiled invoices is one conversation; eleven suppliers with one each is a different problem, and usually means the fault is at your end.

Where this usually goes wrong

6 things that actually happen, rather than a note asking you to be careful.

  • The credit note that is not negative. In the portal’s JSON a credit note carries a type, and a credit note reduces the credit available to you. Most purchase registers do not hold it that way: the note comes out of the accounting package as a positive amount in a separate document type, or on a separate sheet, or as a row that looks exactly like an invoice. Stack it in as a positive taxable value and your register is overstated by twice the note — once because the credit was not removed, once because it was added. It shows up as a large unexplained difference on the supplier’s total while every individual invoice matches, which is a maddening thing to look for if you do not know it is there.
  • Imports and ISD credit are not in the part of the statement that gets matched. A bill of entry is not a B2B invoice. Import credit sits in its own section of 2B, as does credit distributed by an input service distributor, and a reconciliation that reads the invoice and credit note sections — which is what this one does — will not find them. Every bill of entry in your register lands in "in books, not in 2B" and looks like an unfiled supplier. Take the imports out of the register before you reconcile and check them against the portal’s import section separately, or you will chase a customs house for a GSTR-1.
  • A GSTIN with two characters swapped. The whole match is keyed on GSTIN plus invoice number, so a GSTIN that is one transposition away from correct matches nothing. It does not announce itself: the row appears in "in books, not in 2B", which is the pile that means "the supplier has not filed". The check is a checksum, it takes seconds on a whole column, and it is the single highest-value thing to do before the first run. The same applies to a supplier who has changed state and therefore changed GSTIN mid-year while your master data still holds the old one.
  • Starting fresh every month. Suppliers file late. An invoice dated in one month, filed two months afterwards, appears in the later month’s 2B. If each month is reconciled from a clean slate, that invoice is unmatched in its own month and unmatched again in the month it finally appears, because the register has moved on. The carry-forward list is not administrative neatness; without it a normal amount of supplier lateness looks like a permanent hole in the credit.
  • The invoice number your purchase clerk typed. Punctuation, capitals and leading zeros are normalised away, so those cost you nothing. What does not normalise is the wrong number entirely: the delivery note number, the purchase order number, or the supplier’s internal reference copied off the top of the page instead of the tax invoice number underneath it. The second matching pass catches some of these by supplier, amount and date, but only if the taxable value is close and the dates are within a few days. Where a supplier’s document numbering is genuinely strange, fix the register rather than the reconciliation.
  • Treating every difference as an error. A difference of a rupee is rounding, and the tool leaves it alone on purpose. A difference of a few hundred on a large invoice is usually freight or insurance in the taxable value on one side only. A difference that is exactly the tax is the intra-state and inter-state split disagreeing — you have booked CGST and SGST, the supplier has reported IGST, or the reverse — and that one is not a rounding question, it is a question about where the supply took place, and it changes what you may claim.

How long this should take

The first month is slow, because the first month is when you find out that three suppliers have your old GSTIN and that your register calls an invoice number something the portal does not. Budget the better part of a morning for it. After that a month is under an hour: download, map, run, and work through a mismatch list that gets shorter as the suppliers who cause it get chased.

Frequently asked questions

Does this claim the credit for me?

No. It works out which invoices are supported by the statement and which are not, and gives you the four lists and the totals. You still take the figure into your return through whatever you file with. Nothing here connects to the portal and nothing is sent anywhere.

JSON or Excel — does it matter?

Take the JSON when you can. It carries the invoice section, the amendment section and the credit and debit note sections separately and signs the notes correctly. An Excel summary is flatter and, depending where it came from, may not carry the notes at all, which is the most expensive thing to lose.

What about invoices in 2B that belong to a different period?

They are matched on supplier and invoice number, not on the month, so an invoice dated in March that a supplier files in June still matches the March entry in your register if you reconcile the carried-forward list alongside the current month. That is the whole reason for keeping the carry-forward.

Is the register uploaded anywhere?

No. Both files are read and compared by your own browser and the workbook is written there. A client’s purchase register does not leave the machine it is opened on, which is what makes it reasonable to put one through a free tool at all.

The tools this uses

Each one described in its own words, read from its own page. Everything here runs in your browser unless it says otherwise.

Short lists of tools for this kind of work