Inventory playbook
LeafLink + cannabis vendor invoices — kill manual entry
If you order through LeafLink and your POS doesn’t mirror those orders into a draft PO automatically, somebody is retyping every invoice line by hand. Hours a week. Errors compound. Cost-basis drifts. The fix is structural — read LeafLink’s API + match the SKUs + write a draft PO ready for receiving-team confirmation.
What manual entry actually costs
The retyping pattern looks small per-invoice (15-30 minutes for an average 20-line cannabis order) but compounds. A multi-vendor week is 4-6 invoices; a typical dispensary running 20 vendors hits 60-100 invoices/month. At 20 minutes per invoice = 20-33 hours/month of typing that nobody enjoys + nobody verifies because verification is also manual.
- Time — at $25/hr loaded, 25 hrs/month = $7,500/yr in pure-overhead labor.
- Errors — typos drift cost-basis. A SKU with cost typed as $12.50 instead of $1.25 mis-prices margin reports for weeks until someone notices.
- Latency — the time between vendor-ships-it and POS-knows-it-arrived determines when reorder math triggers. If invoices land Tuesday but get typed Thursday, your reorder algorithm is operating with 2-day-stale data.
- Reconciliation — bookkeeper has to match invoice → PO → received → AP. Each disconnect is a question the bookkeeper asks the buyer.
What ‘LeafLink mirror’ means concretely
LeafLink offers an order-mirror API for licensed retailers. The mechanic: you authorize the integration, the platform receives a webhook (or polls) on order confirmation, and a draft PO appears in your POS that’s already line-matched to your product catalog. The receiving team scans incoming product, confirms quantities, and posts. No retyping.
- Authorize once. OAuth handshake or API key (operator-controlled). Stored encrypted in the platform’s env vars; rotates per LeafLink’s rotation cadence.
- Catalog match runs nightly. Your product catalog gets matched to LeafLink’s SKUs by EAN + brand-alias + name fuzzy-match. New unmatched products surface in an admin queue for one-click approval.
- Order confirms → draft PO appears. Within ~5 minutes of you confirming an order in LeafLink, the corresponding draft PO is in your POS, line-matched, with vendor name + delivery date + cost-basis pre-filled.
- Receiving team confirms. Shipment arrives, team scans product, marks confirmed. Variances (short-shipped, damaged) flag for buyer review.
- Posted PO flows to inventory + cost-basis. No re-entry. The cost-basis update propagates to per-product cost in real-time.
Brand alias matching — the gotcha that breaks integrations
Cannabis vendors are frequently spelled multiple ways across LeafLink, your catalog, and supplier emails. Northwest Cannabis Solutions / NWCS / NW Cannabis. Without an alias map, the matcher fails to dedup and your buyer sees 'NWCS' as 3 different vendors. Then the auto-PO splits across them. Then everything breaks.
- Maintain an aliases column on the vendors table — every accepted spelling for that vendor.
- Match runs LOWER + TRIM on both sides — ‘NWCS ’ matches ‘nwcs’ matches ‘NWCS’.
- When a new spelling appears, surface it for admin approval — don’t auto-match (false positives are painful).
- Refresh aliases quarterly — vendors rebrand, merge, change DBAs. Stale aliases break matching silently.
What NOT to mirror
LeafLink’s data is rich. Some of it shouldn’t auto-flow into your POS without human review.
- Don’t auto-receive. The PO appears as a draft. The receiving team has to scan + confirm. Auto-receive would let an unrelated shipment update your inventory.
- Don’t auto-update sale price. Cost-basis flows through; sale price is a margin-decision the operator makes. The product catalog should retain the existing retail price until someone updates it.
- Don’t auto-create new products. A new SKU on LeafLink is a buying decision. Surface it for the buyer to confirm + categorize before it lands in the catalog.
- Don’t auto-pay. Invoice→AP→bank-payment is the bookkeeper’s job. Auto-paying invoices is how you get the inevitable double-pay or wrong-vendor-pay error.
Cannabis-specific wrinkles
- WSLCB lab-test 5% passthrough (WAC 314-55-079) — the cost-basis update has to handle the lab-test surcharge correctly. LeafLink’s line price may or may not include the test fee depending on the producer; the matcher needs to know which side computes it.
- METRC tag chain-of-custody — LeafLink integrations sometimes carry the METRC package id; sometimes don’t. If the tag isn’t in the LeafLink payload, receiving still has to scan the manifest tag separately. The mirror doesn’t replace the manifest workflow — it co-exists with it.
- Allocation-period skew — during recreational allocation cycles, LeafLink prices can shift hour-to-hour. The draft PO should snapshot the price at order-confirm time, not poll for live updates after.
- Vendor terms (Net-X) on the AP side — payment terms (Net-30, Net-60) live in the vendor master, not the LeafLink payload. The bookkeeper’s aging report has to know — and only the vendor master tells it.
Takeaways
- Manual invoice entry: ~25 hrs/month + cost-basis drift + reorder latency + bookkeeper reconciliation friction. ~$7,500/yr in overhead.
- LeafLink mirror: authorize once, catalog match runs nightly, draft POs land 5 min after order-confirm, receiving team confirms — no retyping.
- Once the mirror lands the invoices, manual entry drops toward zero and cost-basis errors fall — nobody’s retyping decimal points.
- Brand alias matching is the make-or-break gotcha — maintain aliases column, refresh quarterly, never auto-match new spellings.
- Don’t auto-receive / auto-update sale price / auto-create products / auto-pay. Preserve human-judgment moments; remove drudgery.
Frequently asked
- How much time and money is manual vendor-invoice entry actually costing my dispensary?
- An average 20-line cannabis order takes 15-30 minutes to retype, and a dispensary running 20 vendors hits 60-100 invoices a month, which works out to roughly 20-33 hours of typing monthly. At $25/hr loaded labor, about 25 hours a month runs near $7,500 a year in pure overhead. On top of the hours you get cost-basis drift from typos, stale reorder data, and reconciliation friction for the bookkeeper.
- If I turn on the LeafLink mirror, does a shipment automatically update my inventory when it lands?
- No. The PO appears as a draft, not a received order, so the receiving team still has to scan the product and confirm quantities before it posts. Auto-receiving is deliberately not done because it would let an unrelated shipment update your inventory. Variances like short-shipped or damaged items flag for buyer review instead of posting silently.
- Why does the same vendor keep showing up multiple times when we try to automate POs?
- Cannabis vendors are frequently spelled several ways across LeafLink, your catalog, and supplier emails, such as Northwest Cannabis Solutions, NWCS, and NW Cannabis. Without an alias map the matcher fails to dedup and your buyer sees one vendor as three, which splits the auto-PO across them. The fix is an aliases column on the vendors table holding every accepted spelling, matched with LOWER and TRIM, refreshed quarterly, and never auto-matching new spellings since false positives are painful.
Related guides
Ready to talk through your migration?
30-minute demo. We end by quoting the cutover from your current setup — fixed scope, no hourly games.