Skip to content

Metrc for dispensaries

Metrc reconciliation for dispensaries: the daily, weekly and 30-day procedure

A vendor-neutral SOP for reconciling POS inventory and sales to Metrc — what to count, what to match, what to do with every discrepancy, and the state deadlines that make the clock real.

By BudAlly

Published Reviewed by Regulatory counsel (advisory)Rule pack MI v9 · CA v14 · NY v9

Who this is for. Dispensary GMs, inventory leads and controllers who close the month against Metrc. It is written to work with any POS — Dutchie, Treez, Flowhub, Cova, BLAZE — and it is not legal advice; the state deadlines quoted are checked against the rule text on the review date above.

The short version

Reconcile three things, on three clocks:

  1. Sales to receipts — daily. Every POS ticket should have a Metrc sales receipt, and the two should agree on packages, quantities and totals.
  2. Packages to shelf — weekly, by cycle. Rotate through rooms so every package tag is physically counted against its Metrc quantity at least once a month.
  3. Everything — at the 30-day count. The full reconciliation most states require, with discrepancies classified, adjusted with reason codes, and reported where the rule says so.

If you do the first two, the third is a report, not a weekend.

Why the monthly count is "a race against the clock"

Metrc is the state's ledger, not yours. Your POS holds what you sold; Metrc holds what the state believes you have. They drift for ordinary reasons — a split package received as one, a return rung as a void, a sample pulled without a tag adjustment, a sync that failed on a Saturday — and every day you don't match them, the drift compounds.

By day 28 you are not reconciling; you are investigating. Operators describe hours spent "manually relabeling, counting and verifying", with each discrepancy meaning time "searching for errors" (Metrc, 2026). In California, an unexplained variance found at inspection "becomes an enforcement case" (Baghoomian Law). The fix is cadence, not heroics.

Step 1 — Daily: sales-to-receipt matching

What to match. For each business day, per licence:

POS sideMetrc sideMatch on
Ticket / transaction IDSales receiptPOS receipt number ↔ Metrc ExternalReceiptNumber (your POS sends it), or the Metrc receipt ID if your POS stores it
Line itemsReceipt transactionsPackage tag (PackageLabel), quantity, unit of measure
Ticket total, tax linesReceipt total, five Metrc tax fieldsTotals within rounding; excise / state / city / county / municipal split per state
Voids and returnsReceipt status / return transactionsVoided POS tickets must not have a live Metrc receipt

How, by POS. Dutchie exposes register transactions with package IDs through its API; Metrc receipt IDs are stored but not always exposed, so join through Metrc's external-receipt endpoint. Treez tickets carry a seven-state workflow — only completed tickets should have receipts. Cova separates orders from completed orders and refunds; match completed orders only. Flowhub and BLAZE expose sales by transaction; verify the package tag is on the line (BLAZE: confirm with your rep). If your POS has no API, a nightly CSV of tickets with package tags is enough.

Daily output. A one-screen list: unmatched POS tickets, unmatched Metrc receipts, mismatched quantities, mismatched totals. Target: zero by 10 a.m. the next day. Anything older than 24 hours gets a name assigned.

Common causes and fixes

  • POS ticket, no Metrc receipt. Sync failure or a sale from a package not in Metrc's "sellable" state. Fix in the POS (re-push) — never create a receipt by hand unless the POS cannot.
  • Metrc receipt, no POS ticket. Someone rang a sale directly in Metrc, or the POS voided after pushing. Void the Metrc receipt with a reason, or reinstate the ticket.
  • Quantity mismatch on one tag. Usually a unit-of-measure problem (eaches vs grams; 5-packs vs singles). Fix the item mapping, not the receipt.
  • Total mismatch. Tax-line mapping. Each state wants its own split; one combined "tax" field from the POS will never match.

Step 2 — Weekly: cycle counts by room

Divide your rooms (vault, sales floor, delivery staging, quarantine, returns) into a rotation so each is counted once a week and every package once a month.

Procedure per room

  1. Freeze movements into and out of the room for the count window (30–60 minutes; do it before opening or after close).
  2. Export the room's Metrc packages (tag, item, quantity, unit) — from Metrc directly, not from the POS.
  3. Scan or count every tag. Record the physical quantity next to the Metrc quantity.
  4. Classify each difference before anyone adjusts anything:
ClassExampleAction
DocumentationPackage split in Metrc, not relabelled on shelfRelabel; no adjustment
TimingSale rung this morning, receipt not yet syncedWait for sync; re-check daily list
ProcessSample pulled without a Metrc adjustmentAdjust with reason code; fix the sample SOP
LossTag missing, no paper trailInvestigate before adjusting; this is what the state's theft/loss notification is for
  1. Adjust in Metrc only after classification, with the reason code the state pack requires and the counter's name on the adjustment.
  2. Log the count: room, date, counter, packages counted, discrepancies by class, adjustments made. Keep the log for the retention period your state sets (New Mexico: sales records 12 months; check your state).

Inbound receiving is where most "shelf" discrepancies start. Receive against the manifest, tag by tag, and record the accepted quantity. If the invoice says 30 and you accepted 28, the invoice quantity must become 28 — a credit memo, not a shrug. If an invoice carries a tag that is not on the manifest, hold the line and ask the sender for a corrected invoice. Do not "fix" the tag.

Step 3 — The 30-day reconciliation

This is the one the rule names. Build it from the daily and weekly work rather than starting from scratch.

Inputs

  • Daily match logs for the period (should be clean).
  • All cycle-count logs (every package counted at least once).
  • Metrc inventory as of close of the last day of the period.
  • POS on-hand as of the same timestamp.
  • Transfers in and out (manifests, accepted quantities).
  • Adjustments, destructions, samples, returns — with reason codes.

Procedure

  1. Pull Metrc packages (all rooms) and POS on-hand at the same cut-off. Match by tag.
  2. For each tag with a difference, trace it: receiving → sales → adjustments → transfers. The daily and weekly logs make this a lookup.
  3. Classify (same four classes). Anything in Loss triggers your state's theft / diversion / loss notification clock — in New Mexico that is "notify CCD"; in California it is a notification within the window set in the DCC rules. Check the pack.
  4. Make the remaining adjustments, with reason codes and names.
  5. Produce the reconciliation report: period, licence, packages reconciled, discrepancies by class, adjustments, net variance by value, open items with owners.
  6. Sign-off by someone other than the person who made the adjustments (maker ≠ checker).
  7. File it where your state requires, or keep it for inspection.

Tolerance is not a target. Some regulators tolerate small variances before enforcement; operators quote a 3%-of-sales figure for California (Chameleon Collective; confirm against the current DCC text before relying on it). Treat any tolerance as the line you never approach, not a budget.

State cadence (as of the review date)

StateSystemReconciliation cadenceNotes
CaliforniaMetrcAt least every 30 days (4 CCR §15051)Loss/theft notification windows in DCC rules; excise separated on retail
MichiganMetrcPer CRA rule and licence conditions [verify cadence]24% wholesale tax lands in purchase cost, never as a retail tax line
New YorkMetrc + Retail ID (Feb 2026)Per OCM rule [verify cadence]Second identifier per unit; 7-day credit reporting clock is separate
New MexicoNMS2S since Sep 4, 2026 (not Metrc)At least monthly (16.8.2.40 NMAC)NMS2S retail API covers sales/voids; an expanded API (Sept 30, 2026) adds inventory reads, splits and adjustments for validated integrators; room moves and transfers stay manual — see the NMS2S guide

What to automate, and what never to automate

Automate: the daily match, the exception list, the cycle-count schedule, the report assembly, the tax-line mapping per state, the inbound invoice-to-manifest tag check.

Never automate: Metrc adjustments, receipt voids, tag "corrections", theft/loss notifications. Each is a regulated action that needs a person, a reason and a timestamp. Software should propose; a named person approves. If your software has an "approve all" button for Metrc adjustments, ask why.

Checklist

Daily (10 minutes) — unmatched tickets: 0 · unmatched receipts: 0 · quantity mismatches: 0 · total mismatches: 0 · exceptions older than 24 h assigned.

Weekly (per room, 30–60 minutes) — movements frozen · Metrc export pulled · every tag counted · differences classified · adjustments with reason + name · log filed.

30-day (half a day if the above is done) — same cut-off for Metrc and POS · every tag traced · losses notified on time · adjustments made · report produced · signed off by a second person · filed.

Download the one-page version above. BudAlly runs the daily match and the exception list for any POS and drafts the 30-day report; a person still approves every adjustment — see how.

Questions

How often does a dispensary have to reconcile inventory to Metrc?
It depends on the state. California requires reconciliation at least every 30 days (4 CCR §15051); New Mexico at least monthly (16.8.2.40 NMAC, on NMS2S rather than Metrc since Sep 2026); Michigan and New York set their own cadence in rule and licence conditions — check the current rule and your licence. Daily sales matching is not usually mandated, but it is the only way a 30-day count doesn't become a hunt.
What counts as a Metrc discrepancy?
Any difference between the quantity on a Metrc package and the quantity you physically hold or your POS reports for that tag, and any POS sale that has no matching Metrc sales receipt (or vice versa). Some states tolerate small variances before a report is required; the tolerance and the reporting window are in the state rule pack, not in Metrc.
Can software fix a wrong Metrc tag automatically?
It shouldn't. A tag mismatch on an inbound invoice means either the invoice or the manifest is wrong; the fix is a corrected document from the sender, not an edit. Adjustments in Metrc are a regulated action with a reason code and a person's name on them.