FlowParse
Tool September 2026 16 min read

POS-to-bank reconciliation for dispensaries

A dispensary's point-of-sale or seed-to-sale system reports what it sold. The bank reports what actually landed. The two rarely match to the cent on their own — cash-handling fees, settlement lag, till variances — and closing that gap by hand is where the hours go.

FlowParse
flowparse.io
flowparse.iosound off is fine
0:00 / 0:00

The number your POS reports is never the number that lands

A retail business's point-of-sale system says what it sold. The bank statement says what actually arrived in the account. For most ordinary retailers, the two are close enough that a rough glance is fine. For a cash-heavy, multi-account cannabis dispensary, the gap between the two is routinely large enough that it needs to be checked and explained, not assumed away.

Doing that by hand — pulling the day's POS report, the bank statement, and the merchant-processor settlement, then manually matching totals and chasing down every difference — is where a dispensary's bookkeeping hours actually go.

FlowParse
flowparse.io

Why the gap is bigger here than at an ordinary retailer

A larger share of sales in cash

Cash sales have to physically move from register to safe to bank deposit, with more opportunity for a count variance at every step than a card sale that settles automatically.

Card-adjacent payments settle separately, on their own schedule

Cashless ATM and high-risk merchant processing don't post to the bank the same day as the sale — the settlement lands as a batch, days later, on the processor's own cycle.

Processing and cash-handling fees are deducted before the deposit posts

The amount that hits the bank is routinely net of a fee the POS report never reflects, which looks like a shortfall until the fee is accounted for.

Multiple accounts split the picture further

A dispensary's cash and card-adjacent income often land in genuinely different accounts, so no single bank statement ever shows the full day's sales on its own.

What this doesn't do, stated up front

Doesn't connect to your POS, seed-to-sale system, bank or processor

No login, no API, no integration. You export and download the reports yourself, the same way you already do, and upload them here.

Doesn't determine the cause of a variance with certainty

It checks a gap against known, common causes first and flags what's left as unexplained — confirming the actual cause is still an investigation a person carries out.

Doesn't replace the physical daily till count

That's a separate, in-person step at close — see the reconciliation guide for how it fits alongside this.

Doesn't file anything with a regulator

This is a bookkeeping tool for your own internal reconciliation, not a compliance submission to any state or federal system.

What gets read and matched

FieldSource
Daily or per-shift sales totalPOS or seed-to-sale sales report
Cash versus card-adjacent splitPOS or seed-to-sale sales report
Deposit amount and dateBank statement
Settlement batch amount and dateMerchant-processor / cashless ATM statement
Fee linesMerchant-processor or bank statement
FlowParse
flowparse.io

POS, seed-to-sale, and settlement, side by side

A dispensary's retail sale gets reported in at least two, sometimes three, separate systems before it ever fully reconciles.

SystemWhat it reports, and when
Point-of-sale (POS)The retail transaction at the moment of sale — item, price, tender type — usually immediately.
Seed-to-sale compliance systemThe same sale, tied to specific inventory, reported to the state's tracking system as required by license — METRC is the most widely deployed.
Bank or merchant-processor settlementThe actual money movement, on the bank or processor's own settlement schedule, which is rarely the same day as the sale.

None of these three is wrong when they disagree on a given day — they're reporting on different schedules for different purposes. Reconciliation means confirming that, once timing is accounted for, the totals genuinely agree.

FlowParse
flowparse.io

The five most common causes of a gap

Settlement timing lag

A card-adjacent sale settling two or three business days after the sale itself, which looks like a shortfall until the later deposit arrives.

Processing or cash-handling fees

A fee deducted before the deposit posts, which the POS report's gross sales figure never reflects on its own.

A genuine till-count variance

A miscount at close, caught and corrected the next reconciliation cycle if the daily till check is running properly.

A partial or split deposit

Cash accumulated across more than one day before an armored pickup or bank visit, landing as one deposit covering several days of sales.

A genuinely unexplained gap

The smallest category by far when the other four are checked first, but the one that actually needs investigation and escalation.

FlowParse
flowparse.io

One day, three sources, reconciled

SourceReported
POS sales total (all tenders)$8,940
Cash deposited to bank (same day)$5,120
Cashless ATM settlement (posts 2 days later)$3,715
Processing fee on settlement-$105
Total accounted for$8,940 (matched)

Checked on the day of the sale alone, this looks like an $8,940-versus-$5,120 gap of $3,820 — nearly half the day's sales unaccounted for. Once the settlement lag and processing fee are factored in two days later, every dollar is explained. That two-day gap is exactly the kind of thing that, if nobody's tracking it deliberately, gets flagged as a mystery week after week without ever actually being one.

FlowParse
flowparse.io

How it works

1

Upload the POS/seed-to-sale report and every account statement

Whatever the period covers — a day, a week, a month.

2

Every figure is read

Sales totals by tender type, deposit and settlement amounts and dates, fee lines, kept linked to their source.

3

Matched with timing accounted for

A settlement isn't compared to the day of sale — it's compared to the day it's expected to post, based on the processor's own typical cycle.

4

Export

Excel, CSV or JSON, with matched, explained-gap and unexplained-gap periods kept as separate groups.

FlowParse
flowparse.io

Where seed-to-sale compliance data fits in

Most licensed states require a seed-to-sale tracking system — METRC is the most widely deployed — that ties every retail sale back to specific tracked inventory for regulatory purposes. That system's own sales report is often the most reliable POS-side total to reconcile against, since it's already independently tied to inventory movement your state regulator separately verifies. This reads that report the same way it reads any other POS export, with no direct integration to the compliance system itself.

FlowParse
flowparse.io

Multiple registers and multiple locations

A dispensary with more than one register, or an operator with more than one location, generates several POS totals and several deposits to reconcile against each other every day. Every register's and every location's reports upload and read the same way, and stay traceable to their own source — see multi-site sales reconciliation for the pattern applied across several locations at once.

How often to run this

Daily is the practical baseline for a cash-heavy retail business, since a variance caught the same day is dramatically easier to trace than one discovered a week or a month later. A lower-volume single-register location can reasonably stretch this to a few times a week without much added risk; a multi-register, high-volume location benefits from running it every single day.

Spotting a recurring pattern, not just a one-off gap

A single day's gap, once explained, is usually the end of the story. A gap that repeats — the same rough size, the same register, the same shift, week after week — is a different kind of signal entirely, and it's one that's nearly invisible if reconciliation only ever looks at one day at a time.

Running the match consistently and keeping the resolved-variance log in one place is what makes a pattern like that visible at all — three unrelated $40 shortages in a month look like bad luck; the same $40 shortage on the same register every Friday night looks like something worth a direct conversation with whoever's closing that shift. Neither conclusion is available from a single day's reconciliation viewed in isolation.

Why cashless ATM settlement is its own reconciliation challenge

Because major card networks still restrict direct card transactions for cannabis purchases in most circumstances, a large share of the industry's card-adjacent volume runs through a cashless ATM or similar workaround — the customer's card is charged as if withdrawing cash from an ATM, rounded to a fixed increment, and the dispensary receives the (rounded) sale amount net of a processing fee.

That rounding is a real, structural reason a cashless ATM settlement total won't match a POS total to the cent even once timing and fees are both accounted for — a $47.50 sale might settle as a $50.00 withdrawal, with the $2.50 difference handled as cash change at the register. Reconciliation for this payment type has to treat that rounding as an expected, explainable pattern rather than a variance, which is different from how a genuinely exact card or ACH settlement is checked.

Who this is for

Dispensary owners and general managers

A fast, repeatable way to confirm sales actually landed in the bank, without a manual line-by-line comparison every day.

Cannabis-specialized bookkeepers

A consistent process applied across several client dispensaries, each with its own mix of POS systems and processors.

Multi-location finance teams

The same matching method applied per register and per location, rolled up into one consolidated view.

Anyone switching POS or processor providers

A reliable way to reconcile a new system's report format from day one, without waiting for a manual process to be rebuilt around it.

This isn't a POS system or a payment processor

Worth being precise about the boundary. This doesn't process payments, doesn't replace your POS or seed-to-sale system, and doesn't connect to either. It reads the reports those systems already produce, alongside your bank statements, and checks that the two agree — the underlying systems and relationships stay exactly as they are.

Handling refunds, exchanges and voided sales

A refund or a voided sale after the original transaction already posted to the POS report adds a small extra step to matching: the deposit reflects the net figure after the refund, while an un-adjusted POS total might still show the original gross sale. Reading both the sale and any same-period refund or void lines, and netting them the same way the bank ultimately does, is what keeps this kind of ordinary retail activity from reading as an unexplained variance.

The realistic first week

Start with a single week already closed — POS or seed-to-sale reports, bank statement, and any merchant-processor or cashless ATM settlement covering the same seven days. Run the match, note every gap, and sort each one into a known category (fee, timing lag, rounding) or a genuine unexplained variance before moving forward.

That first week almost always surfaces a pattern worth knowing about — a fee that's larger than expected, a settlement lag that's longer than assumed, or occasionally a genuine variance that's been quietly recurring without anyone noticing. Once that baseline is established, extending the same check to every week going forward is mostly a matter of repetition, not new judgment calls.

Moving off a manual daily count

Most dispensaries that reach for this already do some version of this check by hand — comparing a printed POS report to a bank statement line by line, once a week if they're disciplined about it, less often if they're not. The transition doesn't require abandoning that process on day one; running the automatic matching alongside it for a week or two, and comparing results, builds confidence before switching over.

What accuracy actually looks like

Most days at a single-location dispensary with a consistent POS and one or two accounts reconcile cleanly once known fees and settlement timing are accounted for. A small number of days genuinely need a closer look — which is the entire point of running this often enough to catch them quickly, rather than treating a clean reconciliation as the expected default and only investigating when something looks obviously wrong.

Privacy

Uploads go over TLS, encrypted end to end.

Processing runs on EU-hosted infrastructure.

Original documents are deleted immediately after extraction.

Sales and financial data are never used to train AI models.

Full details are on the security page.

Frequently asked questions

Match a real day's sales to the bank

Upload a POS report and a bank statement — no signup — and see how the reconciliation behaves.

Keep reading