A statement built for the processor, not for you
A credit card processor statement exists to document what the processor did on its own terms — fee codes, interchange categories, batch references — organized in whatever layout that processor's billing system happens to produce. None of that layout was designed with your spreadsheet in mind.
The number that actually matters to you — what landed in the bank, and why it's less than what the POS reported — sits buried somewhere in that layout, usually requiring a page-by-page read to extract by hand.
Why these statements are hard to work with
Every processor formats its statement differently — different fee codes, different section orders, different terminology for the same underlying concept. A statement that's second nature to read after a year of doing it monthly is genuinely dense the first several times through.
Multiply that density by twelve months a year, or by several processors across a restaurant group, and the manual reading time adds up to real hours that could go toward anything else.
What gets read
Batch dates and reference numbers, gross batch totals, processing fees broken down by type where the statement itemizes them, refund and chargeback lines, and the net deposit amount and date for each settlement.
A field that can't be read with confidence — a fee code that's cut off, a total obscured by a stray mark — is flagged rather than filled with a best guess.
Making sense of fee codes
Most statements list several fee types on the same page — a percentage-based discount rate, a flat per-transaction fee, sometimes a monthly minimum or a statement fee that only applies in slow months. Each is read as its own line rather than folded into one combined “fees” figure that hides what's actually driving the cost.
| Fee type | Typically applies to |
|---|---|
| Discount rate | A percentage of each batch, the largest single fee component |
| Per-transaction fee | A flat fee per card swipe or tap, regardless of amount |
| Chargeback fee | A flat fee charged when a customer disputes a transaction |
| Monthly minimum / statement fee | Charged when total fees for the month fall below a threshold |
Some statements add a fifth category worth watching: a PCI compliance fee, charged when a merchant hasn't completed an annual compliance questionnaire. It's small individually but easy to eliminate entirely once it's visible as its own line rather than buried inside a combined total.
From a statement to matched batches
Once a statement is read into structured rows, each batch and deposit it lists is ready to be matched against your POS system's own batch reports — the exact next step covered by POS batch matching.
Reading the statement and matching it to POS batches are two separate operations that work together — this page focuses on the first, turning a dense document into usable data.
When a month spans more than one statement
Some processors issue a separate statement per settlement cycle rather than one per calendar month, which means a single month can span two or three separate documents, each with its own batch numbering and its own fee summary.
Reading each statement independently and combining the results afterward avoids the trap of trying to force several different cycle boundaries into one calendar-month total by hand — a common source of small, hard-to-trace discrepancies when done manually.
Each statement keeps its own cycle dates in the structured output, so a later question about which cycle a specific fee belongs to has a direct answer rather than requiring a guess about which of several overlapping documents it came from.
Confidence and what gets flagged
Every extracted field carries a confidence level based on how clearly it was printed and how consistent it is with the surrounding context. A fee line that's clearly legible and matches the expected format for that processor is read with high confidence; a smudged or ambiguous figure is flagged instead of guessed.
How it works
Upload the statement
PDF, scan or photo of the processor statement, from any month or processor.
Every line is read
Batches, fees, refunds, chargebacks and net deposits, broken out individually.
Fields checked for consistency
Batch totals minus fees checked against the stated net deposit.
Uncertain fields flagged
Anything read with meaningful uncertainty is marked instead of guessed.
Exported
Excel, CSV or JSON, with every line traceable back to the statement.
A statement, converted
A single-location restaurant, one monthly statement, 27 batches. The statement itself runs six dense pages of fee codes and batch references — the converted spreadsheet reduces it to 27 rows, one per batch, each with its fee breakdown and net deposit clearly laid out.
| Metric | Value |
|---|---|
| Batches on the statement | 27 |
| Total gross volume | $98,420.15 |
| Total fees deducted | $2,876.30 |
| Effective processing rate | 2.92% |
An effective rate that was never visible in the original six-page document becomes a single, checkable figure once the statement is read into structured rows.
Manual vs. automatic
| Manual | Automatic |
|---|---|
| A page-by-page read to find each batch total | Every batch listed as its own row automatically |
| Fees estimated as a flat guess | Every fee type read as its own line item |
| An effective rate that's never actually calculated | Total fees and volume ready to divide instantly |
| Re-learning the layout for each new processor | Same reading method regardless of processor |
From one statement to a full year
One statement a month is manageable by hand, if slow. Twelve months across a single location is a chore. Twelve months across a ten-location restaurant group, each with its own processor, is a job that needs a dedicated hour set aside every month if done manually.
Reading each statement the same way regardless of month or location keeps the effort per statement flat as volume grows — what changes is only how many statements need a second look, which stays small with a well-tuned confidence threshold.
Who uses this
Restaurant owners and controllers
A clear view of what processing actually costs, month over month.
Bookkeepers serving restaurant clients
Statement data exported in a format that drops straight into the ledger.
Restaurant groups with multiple processors
The same structured export regardless of which processor a location uses.
Anyone negotiating processor rates
An accurate effective rate, ready to compare against a competing offer.
Not limited to restaurant statements
Any business reading a processor or merchant services statement runs into the same dense, vendor-specific format — a retail shop, a salon, a services business taking card payments. Nothing about the reading is restaurant-specific; the batch and fee structure a merchant statement follows is largely the same across industries.
What's specific to a restaurant context is pairing this statement reading with POS batch matching and tip pooling — the layers that sit on top of a reconciled statement once tips enter the picture.
A retail business reading the same kind of statement skips both of those layers entirely and goes straight from a structured statement to a general ledger import — a simpler path, but built on the same underlying document-reading step.
Whatever the industry, the fee categories and the reasoning behind an effective rate calculation carry over directly — the specific terminology on the statement may differ, but the underlying structure rarely does, which is exactly why this reading approach isn't built around any one processor's particular layout, and why it holds up just as well the first time a new processor is introduced into the mix, without any retooling needed on your end at all, no matter how unfamiliar its statement format looks at first.
Edge cases worth knowing
A statement that spans a processor switch mid-month — moving from one provider to another — sometimes lists batches from both under one combined statement. Each batch is still read and matched to its own deposit, with the processor change itself worth noting separately rather than treated as a discrepancy.
A refund that appears on a statement without a clearly matching original batch, because the original sale happened in a prior statement period, is flagged rather than silently subtracted from the wrong batch.
A statement that arrives with a page missing or a section cut off — not uncommon with a faxed or poorly scanned copy — is flagged at the section level rather than silently producing an incomplete total. It's worth requesting a clean reprint from the processor in that case rather than working around a genuinely incomplete document.
Spotting a rate that's drifted upward
Processing rates occasionally increase gradually — a fee schedule change buried in a notice nobody read closely, or a shift in transaction mix toward card types with higher interchange costs. A single month's statement rarely makes that drift visible.
With every statement read into the same structured format, comparing an effective rate across six or twelve months becomes a straightforward column comparison instead of a project — often the first concrete evidence needed to renegotiate with a processor.
A rate comparison like this is also useful evidence in the opposite direction — confirming a rate has stayed flat as promised after a renegotiation, rather than assuming a new contract is being honored without ever checking.
Why a flagged line beats a guessed one
A spreadsheet that fills every cell with a number, regardless of how confidently it was read, looks complete right up until someone relies on a figure that was actually a guess. A flagged cell is less comfortable to look at than a filled one — and considerably more trustworthy.
Keeping the confidence level attached to every field means a review focuses on the handful of genuinely uncertain lines, not a blanket re-check of the entire statement.
Comparing statements year over year
A single month's statement answers what happened that month. A question that comes up less often but matters more — whether the effective processing rate this year is higher, lower or flat compared to last year — needs every month's statement read the same consistent way, not just checked one at a time as it arrives.
That comparison is only possible if every prior statement is still sitting in the same structured format somewhere accessible, rather than scattered across whatever folder or inbox happened to be convenient when each one arrived. A spreadsheet built from last month's statement and never touched again is exactly the kind of artifact that's hard to compare against six months later.
A rising effective rate across several quarters, invisible in any single month's statement, is often the first concrete evidence worth bringing to a processor renewal conversation — and it only becomes visible once a year of statements sits in the same comparable format.
Switching processors mid-year
A restaurant that switches processors mid-year ends up with two statement formats to read for the same calendar year — the old processor's layout for the first several months, the new one's for the rest. Comparing volume or fees across the switch by hand means learning two formats and reconciling them manually.
Reading both statement formats into the same structured output removes that friction — the switch itself becomes a single row in the data noting a processor change, rather than a discontinuity that breaks the year's comparison in half.
What this means at tax time
Processing fees are a legitimate, deductible business expense, and a full year of statements broken into structured rows makes the total straightforward to pull for a tax preparer — a single column sum, rather than a page-by-page read through twelve months of dense statements during the busiest weeks of tax season.
The same structured export that supports a processor renewal conversation or a monthly reconciliation routine does double duty here, without requiring a separate year-end project to compile the same numbers a different way.
What it doesn't do
Doesn't renegotiate your processing rate
Surfaces the effective rate clearly. Negotiating a better one with your processor stays your step.
Doesn't file anything
No connection to any tax authority or bank — it reads and structures the statement you upload.
Doesn't independently verify a fee is correct
Reads what the processor actually charged; whether that charge matches your contracted rate is a comparison you make.
