🚀 Decoda raises $4.5M, led by Y Combinator. Read more

Inventory

The vial count is wrong.
You just don't know it yet.

Product arrives on a packing slip, leaves through a treatment, and gets counted once a month by someone standing in a stockroom with a clipboard. The gap is where your margin goes.

5 vials unaccounted
Counted with a clipboard
End of month count
Manual
ProductSystemCounted
Botox 100U14 vials−3
Juvéderm Ultra XC9 syringes
Dysport 500U6 vials−2
Kybella 2mL8 vialsNever counted
Nobody knows when it walked off, or who charted it

Getting it in

Two ways in. Neither is typing.

Photograph the packing slip, or scan the boxes as you unpack them. Both land in the same place, with lot and cost attached.

Packing slip · photo
Reading
Dysport 500UMatched existing
12 vial·$590.00 / vial
Juvéderm Voluma XCMatched existing
6 syringe·$310.00 / syringe
Sculptra 150mgNew stock
4 vial·$425.00 / vial
Two matched to stock you already carry. Nothing duplicated.
Take delivery · scan
Botox 100U
LotC4821X
ExpiryNov 2027
Cost / vial$565.00
LocationPlano
Lot and expiry captured at the door, not reconstructed later

Photo intake matches against the stock you already carry instead of creating duplicates, and leaves blank anything it can't read with confidence.

Getting it out

Stock leaves when the chart says so.

Link a stock item to the service, product, or medication that consumes it. When the provider documents the treatment, the units come off the shelf at the same moment the charge is queued.

  • Partial units drawn down at the ratio you set
  • Oldest-expiring lot drawn by default, or pick the exact lot at checkout
  • Per-location, so the right shelf gets decremented
One action, four effects11:42 AM
Provider charts 24u glabella
Botox 100U · Lot C4821X
24 units deducted from stock
Plano · 11 vials → 10.76 vials
Charge queued to checkout
Priced from the treatment
Oldest-expiring lot drawn
Or pick the lot, so the ticket matches the shelf
Nobody opened the inventory tab.

Before it bites

Running out is a scheduling problem.

Discovering you're out of Botox on a packed Thursday doesn't just cost the product. It costs the column of appointments you booked against it.

  • Par levels per stock item, per location
  • Low and Critical thresholds you set yourself
  • Expiry warnings ahead of the date, not after it
  • Purchase orders and supplier records in the same place
Needs attention4 items
Botox 100U
2 vials left · below par of 6
Critical
Juvéderm Ultra XC
5 syringes left · par is 8
Low
Sculptra 150mg
Lot S-2201 expires in 21 days
Expiring
Kybella 2mL
Lot K-1145 expired Mar 4
Expired
Par levels are per location, so Plano running low doesn't hide behind Scottsdale's shelf
“You can take a photo of a Dysport box and it recognizes it's 500 units? That's incredible.”
MSO Operator · 6–20 locations

Stop counting syringes by hand.

Intake that reads the packing slip, deduction that follows the chart, and alerts that fire before a shortage reaches the schedule. The count stays right because nobody has to keep it right.

Same shelf — Decoda
Live count
Botox 100U10.76 vials
Juvéderm Ultra XC9 syringes
Dysport 500U6 vials
Kybella 2mL8 vials
No month-end count. The number was never wrong.