Sales Tax Reconciliation: Tying the Sales Report, the Ledger and the Return for Every Client
The return gets filed from the sales report, the payment goes out, and the sales tax payable account keeps a balance nobody can explain. For a bookkeeping firm with clients selling in several states and channels, that leftover is either tax underpaid or tax the client paid twice. This post covers how to reconcile the sales report, the ledger and the return every period, before anything is filed.
In brief
- Sales tax a client collects is a liability held for the state, not revenue, so the sales tax payable balance should tie to the tax due on the returns for the period.
- A sales tax reconciliation ties three things before filing: gross, exempt and taxable sales on the sales reports, the revenue and sales tax payable accounts in the ledger, and the figures on the return.
- Refunds and returns reduce both taxable sales and the tax due; when the refunded tax is not reversed in the ledger, the liability stays overstated.
- Exempt sales hold up only with a valid exemption or resale certificate on file, so every exempt line on the report should point to a certificate.
- Sales made through a marketplace that collects and remits the tax are reported or deducted according to each state's rules, but the client does not remit that tax a second time.
Why sales tax drifts out of balance
Sales tax is not the client's money. When a business charges it to a customer, it holds that tax for the state and the local jurisdictions until the return is filed and paid. In the ledger, collected tax is a credit to a sales tax payable account; the payment is a debit to the same account. If everything is recorded right, the balance at the end of a period equals the tax due on the returns for that period, and it goes to zero when they are paid.
In practice that account rarely sits at zero. Since the South Dakota v. Wayfair decision in 2018, states can require a seller to collect tax once its sales into the state pass an economic threshold, even with no office there. Thresholds and rules vary by state, so a small online seller can owe returns in several states, at different frequencies, each with its own rates by county or city. Add a point-of-sale system, an online store and a marketplace, each with its own report, and the ledger is fed from three places that never agree on what a sale is.
The bank deposit does not help either. A processor deposit is net of fees and refunds and gross of tax, the same problem covered in the post on marketplace payout reconciliation. A bank rule that sends the whole deposit to sales puts the tax inside revenue, and the liability is understated from the first day.
2018
year of the Wayfair decision that opened economic nexus
5
states with no statewide sales tax
4
checks in the example tie-out below
The three sources that have to agree
A sales tax reconciliation is a three-way comparison, run per client, per jurisdiction and per period.
The sales reports
Each channel produces a summary for the period: gross sales, exempt sales, taxable sales, refunds and tax collected, ideally by jurisdiction. They arrive as exports from the point-of-sale system, PDF statements from a processor, and settlement reports from a marketplace, in a different layout for every client. This is the document side of the work, and the one that takes the time.
The ledger
Revenue by channel and the sales tax payable account, with every credit for tax collected, every debit for refunds and payments, and the period each entry fell in. A clean ledger keeps tax out of revenue and books each channel separately, so a difference can be traced to one source.
The return
The figures the state asks for: usually gross sales, deductions such as exempt and resale sales, taxable sales, the tax by jurisdiction, and any credit or timely filing discount the state allows. The return is what the client signs, so every line on it should trace to a report and to the ledger. For returns already filed, the prior returns and the payment confirmations are part of the file too.
A worked example: one quarter, two channels
Take an illustrative client filing quarterly in one state at a combined rate of 8 percent. Its own store reports 412,600.00 of gross sales for the quarter. Of that, 94,200.00 went to resellers and is exempt, leaving 318,400.00 taxable and 25,472.00 of tax collected. During the quarter, customers returned 6,150.00 of taxable goods and got 492.00 of tax back. The client also sold 86,300.00 through a marketplace, which collected and remitted the tax itself.
Net taxable sales are 318,400.00 minus 6,150.00, or 312,250.00, and the tax due is 24,980.00. The ledger, however, shows 25,472.00 credited to sales tax payable: the refunds went back to customers from the bank account, but only the sale was reversed, not the tax. The return drafted from the report is right; the ledger is 492.00 high, and if nobody explains it, the balance sits there quarter after quarter.
Taxable sales, own store
Exempt sales, resale certificates
Marketplace sales, tax remitted by the marketplace
The exempt sales raise a second question. The client holds resale certificates from two customers covering 81,700.00 of those sales; the other 12,500.00 went to customers with no certificate on file. Without one, an auditor can treat those sales as taxable and assess the tax on them, so the certificate gap matters more than the 492.00.
Where the breaks come from
Across a portfolio of small-business clients, the differences are rarely arithmetic. They come from what was recorded and what was never collected.
Refunds and deposits
Refunds whose tax was not reversed overstate the liability, as in the example. Deposits booked gross, with the tax inside sales, do the opposite: revenue is too high and the payable too low, and the payment to the state then lands as an expense with no liability to clear.
Exempt sales and certificates
An exempt sale needs a valid exemption or resale certificate, collected at or near the time of sale and kept on file. Certificates expire, customers change entities, and the certificate often lives in an email attachment rather than next to the customer record. Collecting them is the same kind of chase described in the post on W-9 collection and 1099 prep.
Marketplace sales
Marketplace facilitator laws make the marketplace collect and remit tax on the sales it handles. Some states still want those sales on the seller's return as gross sales with a matching deduction; others do not. Either way, the client should not remit that tax again, and the marketplace report is what proves it was paid.
Refunded tax not reversed
Exempt sale without a certificate
Deposit booked gross, tax in revenue
Marketplace sales double counted
Payment posted to the wrong period
Other
From sales report to tie-out
For a firm with a hundred clients, the comparison is simple once the numbers sit in the same fields. The work is getting them there: every channel report, every certificate, every prior return, read into one shape. That is the same pattern as receipt-to-bank matching at month-end: extract once, then let rules compare.
Define the sales report summary as an extraction schema with typed fields: amounts as numbers, the period as dates, exempt and taxable sales as separate fields, and jurisdiction as a code rather than free text. A certificate becomes a record with the customer, the type, the state and the expiry date. Typed fields, as the post on extraction schema design explains, let a check confirm that gross minus exempt equals taxable before anyone compares it with the ledger.
{ "client_id": "client-0318", "period": "2026-Q3", "jurisdiction": "example-state", "sales_reports": { "own_store": { "gross_sales": 412600.00, "exempt_sales": 94200.00, "taxable_sales": 318400.00, "refunds_taxable": 6150.00, "tax_collected": 25472.00, "tax_refunded": 492.00 }, "marketplace": { "gross_sales": 86300.00, "tax_collected_and_remitted_by_marketplace": 6904.00 } }, "exemption_certificates": [ { "customer": "customer-a", "type": "resale", "covers_sales": 52400.00, "expires": "2028-06-30" }, { "customer": "customer-b", "type": "resale", "covers_sales": 29300.00, "expires": "2027-01-31" } ], "ledger": { "revenue_own_store": 412600.00, "revenue_marketplace": 86300.00, "sales_tax_payable_credits": 25472.00 }, "return_draft": { "taxable_sales": 312250.00, "rate_pct": 8.0, "tax_due": 24980.00 }, "checks": [ { "check": "gross_sales_vs_ledger", "status": "ties" }, { "check": "tax_payable_vs_return", "ledger": 25472.00, "expected": 24980.00, "difference": 492.00, "status": "break", "hint": "Tax on refunds not reversed from sales tax payable" }, { "check": "exempt_sales_have_certificates", "exempt": 94200.00, "covered": 81700.00, "uncovered": 12500.00, "status": "break", "hint": "No certificate on file for two customers" }, { "check": "marketplace_tax_not_remitted_twice", "status": "ties" } ], "requires_review": true}In this example, gross sales tie to the ledger and the marketplace tax is correctly left out of what the client owes. Two checks break: the liability is 492.00 higher than the tax due because refunded tax was not reversed, and 12,500.00 of exempt sales have no certificate behind them. The fix is one reviewed entry to sales tax payable and a request to the client for two certificates, before the return is filed.
Reconcile before you file, not after the notice
Keep the extracted figures honest
Treat extracted report figures as a draft until they pass the checks a reviewer would make anyway: gross minus exempt equals taxable, tax collected is close to taxable sales times the rate for each jurisdiction, the period on the report matches the return, and refunds carry their tax. Decisions such as whether a client has nexus in a new state, or whether a product is taxable, are never extracted; a person makes them and records why. Keep a labelled set of reports from the platforms that appear most across clients and score the fields when a layout changes, as described in the post on building a field-level eval set.
Sales tax close: a checklist
- Collect the sales report from every channel for the period, with gross, exempt and taxable sales, refunds and tax by jurisdiction.
- Confirm gross sales per report tie to revenue per channel in the ledger, with no tax booked inside revenue.
- Match every exempt sale to a valid exemption or resale certificate, and request the missing ones.
- Reverse the tax on refunds and returns, and confirm the liability moves with them.
- Separate marketplace sales whose tax the marketplace remitted, and keep its report as support.
- Compare sales tax payable with the tax due on the draft return, and explain every difference.
- File, record the payment against the liability, and confirm the balance for the period goes to zero.
Where extraction fits
The comparison is arithmetic, and the rules are the state's. What slips across a portfolio is reading every sales report, marketplace statement and certificate for every client, every period. Parser turns each of those documents into structured JSON against an extraction template you define, so the tie-out runs on data and the team's time goes to the nexus and taxability questions only a person can answer. For the purchase side of the same ledger, see the post on use tax accrual on vendor invoices.