Fictional store. Every number here is made up to show how the check works.
Sample free store check
What a store’s own numbers can tell it
This is the free store check run on Harbor Leaf, a store we made up, using an inventory export, a sales export, a product list and a CCRS result file we generated for it. The checks are the same ones a store’s own files would get. You can open each finding and its fix, and nothing here is saved.
Under each finding: how to fix it in the system a store already uses, and what CannAgent does.
Harbor Leaf’s report
As of 2026-09-30 · sales export covers 30 days. Dollar figures are estimates built from the costs and prices in the files. Use them to decide where to look first, not as a final number.
This is not a compliance review, not legal advice, and not approved by WSLCB.
The value at cost of stock sitting on the shelf. This isn’t money lost: most of it will sell, just slowly. One product can be in more than one of these, so they aren’t added up.
Aged stock (90+ days on hand): 4 flagged · ≈ $1,894 (estimated) at cost
More than 12 weeks of supply on hand: 15 flagged · ≈ $1,051 (estimated) at cost
Not selling (in stock, no sale in 30 days): 3 flagged · ≈ $218 (estimated) at cost
Also worth a look
Products with no cost on file: 3 flagged
Cost looks wrong: 2 flagged
Dose in the product name, no potency on file: 1 flagged
CCRS rows rejected: 2 flagged
Money
Sales below cost
Needs attention
2 of 1632 costed sales lines sold under unit cost. 40 more sales lines had no unit cost we could match, and were not checked (often a product sold out and so not in your on-hand file). Pre-tax amounts are read from your “Net Sales” column.
≈ $4.50 (estimated) lost over the 30 days the sales export covers (≈ $1.05 (estimated) a week).
Why it matters
Every unit sold under what it cost you is margin paid out of pocket, usually from a stale price, a stacked discount, or a cost that changed after the price was set.
What to do
Re-price the listed items (or end the discount driving them under cost), then re-run this check on next week's export.
How to fix it
By hand, in your current system
Open each listed product and compare its price with its unit cost on the invoice.
If it was a planned promo, leave it. If not, raise the price or end the discount that takes it under cost.
Next week, export sales again and re-run this check to confirm.
With CannAgent
Works out a price to aim for that brings an item sold under cost back to your usual margin, as a list to check against your own prices.
See it in CannAgent
Preview — this is what CannAgent would do. Nothing has changed in your system.
Your usual margin, across the 173 products we could compare in your files, is 51.4%. For each product below, this is the price to aim for, after discounts, that would put it back at that margin.
The average price here is what you took per unit after discounts, not the shelf price. Compare the price to aim for with what you actually sold at: if the shelf price is already fine, the fix is ending the discount, not changing the price.
This shows all 2 products with a sale under cost.
product
sku
units sold
average price after discounts
unit cost
price to aim for, after discounts
Northbank Night Tide Cartridge 1g
HL-NBX-0050
1
$43.00
$46.00
$94.65
Northbank Glass Orchard Cartridge 0.5g
HL-NBX-0039
1
$33.00
$34.50
$70.99
This is a picture of how it would look. Your system and your files are untouched.
Not a compliance review, not legal advice, not approved by WSLCB.
Not a compliance review, not legal advice, not approved by WSLCB.
The rows behind this number
product
sku
qty
pre-tax revenue
unit cost
estimated loss
Northbank Night Tide Cartridge 1g
HL-NBX-0050
1
$43.00
$46.00
≈ $3.00 (estimated)
Northbank Glass Orchard Cartridge 0.5g
HL-NBX-0039
1
$33.00
$34.50
≈ $1.50 (estimated)
Money
Products with no cost on file
Needs attention
3 of 180 products have no unit cost (1% of pre-tax sales).
≈ $573 (estimated) of pre-tax sales on products with no cost, so margin on it is unknown (≈ $134 (estimated) a week).
Matched 180 of 180 products by SKU.
Why it matters
Without a cost, margin on that product cannot be known, and any below-cost sale on it is invisible to every other check.
What to do
Enter unit cost from the vendor invoice for each listed product; the busiest ones first.
How to fix it
By hand, in your current system
Find the vendor invoice or manifest for each listed product.
Enter the cost of one unit on each product, or fill a cost column and import it if your system takes imports.
Upload again so the other checks can use those costs.
With CannAgent
Lists every product with no cost on file, from the exports you already pull.
Not a compliance review, not legal advice, not approved by WSLCB.
The rows behind this number
product
sku
units sold
pre-tax revenue
Ridgeline Night Tide Flower 3.5g
HL-RPR-0142
11
$308.00
Saltmarsh Velvet Pine Pre-Roll 1g
HL-SMB-0171
25
$175.00
Ridgeline Night Tide Pre-Roll 1g
HL-RPR-0118
10
$90.00
Money
Cost looks wrong
Needs attention
2 products have a cost worth verifying, of 177 with a cost. Cost was compared with selling price for 173 of 177 products with a cost; the rest had no sales line we could read a price from.
Why it matters
A placeholder cost, a cost at or above the selling price, or a case cost entered as a unit cost passes as "has a cost", and then every margin and below-cost figure on that product is wrong.
What to do
Verify each listed cost against the vendor invoice or manifest, and correct the cost on the product in your POS where it's wrong.
How to fix it
By hand, in your current system
Find the vendor invoice or manifest for each listed product.
Compare the cost of one unit on the invoice with the cost on file; a case or pack cost goes in as the cost of one unit.
Correct the cost on the product in your system where it differs, then upload again.
With CannAgent
Lists costs that look like placeholders, sit at or above the selling price, or differ sharply between lots.
Not a compliance review, not legal advice, not approved by WSLCB.
The rows behind this number
product
sku
unit cost
sells for (average)
what to verify
Northbank Glass Orchard Cartridge 0.5g
HL-NBX-0039
$34.50
$33.00
the cost is at or above what it sells for
Northbank Night Tide Cartridge 1g
HL-NBX-0050
$46.00
$43.00
the cost is at or above what it sells for
Inventory
Not selling (in stock, no sale in 30 days)
Needs attention
3 of 172 in-stock products have no sale in the last 30 days of sales.
≈ $218 (estimated) of stock at cost that has not sold.
Matched 169 of 172 products by SKU.
Why it matters
Stock that sits is cash that isn't buying what sells, and the longer it sits the harder it is to sell at full price. This is cash tied up, not money lost: most of it will sell, just slowly.
What to do
Start with the most valuable. Mark it down, or bundle it at a price (never free), and order less of it next time.
How to fix it
By hand, in your current system
For each listed item, note when it last sold and where it sits in the store.
Count it, and record any difference in your system as an adjustment with its real reason, so it reaches CCRS with that reason.
Give it a better spot or a priced deal, and hold off reordering it until it moves.
With CannAgent
Builds the full list of items with no recent sale, ready to print as a count sheet.
See it in CannAgent
Preview — this is what CannAgent would do. Nothing has changed in your system.
A count sheet for all 3 items with no recent sale, most money first.
Record any difference in your own system as an adjustment with its real reason, so it reaches CCRS with that reason. An item stays on this report until a new export shows it selling.
product
sku
on hand in your books
counted
reason, if different
Northbank Ember Field Cartridge 0.5g
HL-NBX-0040
11
Ridgeline Moss Lantern Pre-Roll 1g
HL-RPR-0117
11
Ridgeline River Slate Pre-Roll 1g
HL-RPR-0120
6
This is a picture of how it would look. Your system and your files are untouched.
Not a compliance review, not legal advice, not approved by WSLCB.
Not a compliance review, not legal advice, not approved by WSLCB.
The rows behind this number
product
sku
on hand
unit cost
estimated value at cost
Northbank Ember Field Cartridge 0.5g
HL-NBX-0040
11
$13.25
≈ $146 (estimated)
Ridgeline Moss Lantern Pre-Roll 1g
HL-RPR-0117
11
$4.00
≈ $44.00 (estimated)
Ridgeline River Slate Pre-Roll 1g
HL-RPR-0120
6
$4.75
≈ $28.50 (estimated)
Inventory
Stopped selling, still in stock (check the shelf)
No problems in 167 of 172 products · 5 not checked
None of the 169 in-stock products we could match sold steadily and then went quiet for the last 14 days. 3 in-stock products had no sale we could match in your sales export, so we can't tell whether they were selling; they are not counted here. 2 products were left out because all of their stock was received in the last 14 days and may simply not have sold yet.
Why it matters
A product that was selling steadily and then went quiet while the system still shows stock is the kind most likely to be missing from the shelf: sold through and never counted down, rung up as another product, or lost. It may also be real stock that's been moved or is out of sight. Either way it stays on your menu, and a customer can still order it.
What to do
Check the shelf and the back stock for these first, starting at the top. If the count is off, record an inventory adjustment in your POS with its real reason, so it reaches CCRS with that reason. Don't just overwrite the count: a write-off with no reason can be taxed as a sale. Product you can't sell is destroyed under the waste rules, with a record. Then re-run this check on a new export.
Inventory
More than 12 weeks of supply on hand
Needs attention
15 of the 109 products we could work out a weekly rate for hold more than 12 weeks of supply. Each rate is over the last 28 days of your sales, or from when the product first sold or arrived, if that is later. With no received date, a product whose sales stopped for 7 or more days and started again is read from when they started again. Left out: 7 in-stock products have no sale at all (see "Not selling"); 16 products sold fewer than 3 units or on fewer than 3 days, too few to call a weekly rate; 40 products first sold or arrived in the last 13 days, too new to call a weekly rate.
≈ $1,051 (estimated) of stock at cost beyond 12 weeks of supply.
Why it matters
Weeks of supply is what you hold divided by what you sell in a week. Past 12 weeks, about a quarter, the cash in it could have turned over several times, and flower and carts are getting old on the shelf. This is cash tied up, not money lost: it will sell, just slowly. It needs no received date.
What to do
Order less of these, or skip the next order, until they come down. To move them sooner, mark them down or bundle them at a price (never free), starting with the most cash tied up.
How to fix it
By hand, in your current system
For each listed item, divide what is on hand by what sells in a week.
Skip or shrink the next order until it comes down.
To move it sooner, mark it down or bundle it at a price (never free).
With CannAgent
Works out weeks of supply for every product from your sales, with the cash tied up beyond 12 weeks.
Not a compliance review, not legal advice, not approved by WSLCB.
First 10 of 15
product
sku
on hand
sold a week
weeks of supply
estimated value beyond 12 weeks
Northbank Velvet Pine Cartridge 1g
HL-NBX-0046
20
0.8
26
≈ $275 (estimated)
Cascade Hollow Willow Smoke Flower 14g
HL-CHF-0030
23
1.8
13
≈ $105 (estimated)
Northbank Night Tide Rosin 1g
HL-NBX-0068
24
1.6
15
≈ $103 (estimated)
Cascade Hollow Yellow Kite Flower 7g
HL-CHF-0026
17
1.1
15
≈ $82.77 (estimated)
Northbank Glass Orchard Rosin 1g
HL-NBX-0066
15
1
15
≈ $76.50 (estimated)
Cascade Hollow Silver Basin Flower 7g
HL-CHF-0020
18
1.3
14
≈ $74.25 (estimated)
Northbank Velvet Pine Cartridge 0.5g
HL-NBX-0037
14
0.8
19
≈ $73.75 (estimated)
Saltmarsh Cedar Fog Flower 3.5g
HL-SMB-0153
22
1.4
16
≈ $67.60 (estimated)
Northbank Quiet Citrus Cartridge 0.5g
HL-NBX-0042
17
1
17
≈ $60.00 (estimated)
Ridgeline Driftwood Berry Pre-Roll 1g
HL-RPR-0109
23
1.1
22
≈ $46.80 (estimated)
Inventory
Aged stock (90+ days on hand)
Needs attention
4 in-stock lots or products are 90+ days old.
≈ $1,894 (estimated) tied up at cost in stock 90+ days old.
Why it matters
Cash sitting in old stock is cash not buying what sells, and older product is harder to sell at full price. This is cash tied up, not money lost.
What to do
Mark down, or bundle at a price (never free), the oldest lots first, and lower the re-order quantity on the products that keep landing here.
How to fix it
By hand, in your current system
Sort your inventory by received date and pull the listed lots.
Mark down the oldest first, or bundle them at a price (never free).
Lower the reorder amount on products that keep landing on this list.
With CannAgent
Lists the stock on hand past your aged limit, with what each is worth at cost.
Not a compliance review, not legal advice, not approved by WSLCB.
The rows behind this number
product
sku
on hand
days on hand
estimated value at cost
Northbank Moss Lantern Rosin 1g
HL-NBX-0071
17
124
≈ $480 (estimated)
Saltmarsh Mint Balm 200mg
HL-SMB-0148
40
140
≈ $480 (estimated)
Northbank Ember Field Rosin 1g
HL-NBX-0067
16
121
≈ $468 (estimated)
Northbank Wild Fennel Live Resin 1g
HL-NBX-0061
23
162
≈ $466 (estimated)
Inventory
Best sellers now out of stock
Not checked
Skipped. Your export lists only items in stock (8 rows show 0 or less, too few to tell that sold-out items are included), so we can't tell which best sellers have sold out. That's common. If your system can include products with 0 on hand in the export, upload again to include this one.
Inventory
Dose in the product name, no potency on file
Needs attention
1 of 42 products with a dose in the name have no potency value on file.
Why it matters
The figure lives only in the name, so menus and reports that read the potency field show nothing, and an edited name can drift from the lab result.
What to do
Fill the potency field from the lab certificate for each listed product. Don't copy the figure from the name; the name may be out of date.
How to fix it
By hand, in your current system
Find the lab certificate for each listed product.
Enter its THC and CBD from the certificate, not from the name, which may be out of date.
Check the dose in the name matches the certificate before it goes back on the menu.
With CannAgent
Lists every product whose name states a dose and has no potency on file.
Not a compliance review, not legal advice, not approved by WSLCB.
The rows behind this number
product
sku
Tidewater Lime Mint Gummies 100mg
HL-TWE-0078
CCRS result files
CCRS rows rejected
Needs attention
2 of 40 result rows came back with an error: duplicate row (1), required field missing (1). A result file shows one submission: a row corrected and accepted later still shows here as rejected, and a submission without a result file is not checked here.
Why it matters
A rejected row was sent but never accepted. Until it is corrected and sent again, the state's record of your inventory or sales does not match yours.
What to do
Duplicate row: Check the CCRS portal first. This row may already be accepted. Don't send it again until you've confirmed it isn't on file. Required field missing: A required field is blank. Fill it in on the record in your POS with what actually happened, and let your POS or integrator send it again. Never change an on-hand count or a quantity just to get a row accepted. If the row is right and CCRS still refuses it, that is a question for WSLCB, not an edit.
How to fix it
By hand, in your current system
Group the rejected rows by error; one product or licence record often explains many of them.
For a duplicate, check the CCRS portal first: the row may already be accepted, so hold it until you have confirmed.
For the rest, correct the record in your system (never the inventory count) and let it send again. If the row is right and CCRS refuses it again, ask WSLCB rather than editing it.
With CannAgent
Groups the rejected rows by kind of error, so you can see which kind most of them are.
Not a compliance review, not legal advice, not approved by WSLCB.
The rows behind this number
file
row
error class
sale-result.csv
12
Duplicate row
sale-result.csv
27
Required field missing
Want to see it on your own files?
The free store check isn’t open for sign-up yet. Tell us about your store and a person will get back to you about running it on your own exports.