One line, decided wrong, for a whole tax year
Every ordinary business gets to deduct rent, wages, marketing and general administrative cost against its taxable income. A cannabis business trafficking in a federally scheduled substance — which is still the legal classification even in states where it's fully licensed — doesn't get that. Section 280E of the tax code allows only the cost of goods sold, and nothing else, to reduce taxable income.
That makes one classification decision, repeated on every vendor invoice and every bank transaction, the single line item with the most tax consequence a dispensary's bookkeeping produces. This page describes the mechanic that draws that line consistently, spelled out on its own because it's worth understanding in detail before trusting it with a real filing.
What 280E actually says, in plain terms
Section 280E was written in 1982, aimed originally at drug traffickers, and denies a business that deduction for any expense connected with trafficking in a Schedule I or Schedule II controlled substance. Cannabis has stayed on that federal schedule even as individual states legalized it, so a fully licensed, state-compliant dispensary is still, for federal tax purposes, subject to the same rule written for an entirely different kind of business four decades ago.
The one carve-out that survives is cost of goods sold — a concept that predates 280E and applies to every business, cannabis or not, as a reduction to gross receipts before gross profit is even calculated, rather than as a deduction from it. That distinction — COGS reduces the number 280E never touches, everything else is a deduction 280E specifically forbids — is why the split matters so much more here than it would for an ordinary retailer.
Why the COGS line is hard to draw correctly
No fixed, published list of what qualifies
COGS classification for cannabis draws on general inventory-costing principles applied to a specific business's own facts, not a fixed checklist — which leaves real room for a defensible position to still be wrong in the details.
A retail-only dispensary has a narrower COGS than a cultivator
A pure retailer's COGS is mostly the wholesale cost of inventory purchased for resale; a vertically integrated operator growing and processing its own product has a much wider, more complex set of direct production costs that can legitimately qualify.
Shared costs need allocation, not a binary tag
A facility that both cultivates and retails shares rent, utilities and some labor across activities that are treated completely differently under 280E — a cost that's fully COGS for the cultivation side can be entirely non-deductible for the retail side.
The stakes cut both ways
Overstating COGS understates tax owed and invites exactly the audit scrutiny cannabis businesses already draw disproportionately; understating it means paying tax on income that was never legally taxable in the first place.
What gets checked
| Field | What it signals |
|---|---|
| Vendor name | Cultivator, wholesale supplier and packaging vendors skew COGS; software, marketing and professional-services vendors skew operating expense. |
| Line-item description | “Flower — bulk” or “packaging materials” read differently than “monthly POS subscription” or “general liability premium.” |
| Amount and unit context | A per-unit or per-pound cost pattern is more consistent with inventory purchase than a flat monthly fee. |
| Account or category, where already tagged | An existing chart-of-accounts category, when the source document or bookkeeping system provides one, is read as a strong signal rather than ignored. |
How classification works
Rather than guessing from the amount alone, classification checks a fixed sequence of signals, in order, for every line.
Vendor pattern
Is this vendor a recognized cultivator, wholesale product supplier or packaging vendor, versus a software, marketing, insurance or professional-services provider?
Description pattern
Does the line-item text describe inventory, raw material or direct production cost, versus overhead, administrative or selling cost?
Existing category, if present
Where the source document or your own chart of accounts already carries a classification, it's weighed as a strong signal rather than overridden silently.
Consistency with the rest of the document
A line that looks ambiguous in isolation is checked against the pattern of the rest of the invoice — a packaging line on an otherwise clearly COGS cultivator invoice reads differently than the same line on a general supplies order.
What typically counts as COGS, and what doesn't
| Typically COGS | Typically non-deductible OPEX |
|---|---|
| Wholesale product purchased for resale | Retail rent and store-front utilities |
| Cultivation labor, nutrients, growing supplies | General marketing and advertising |
| Packaging directly tied to a specific product | Budtender wages (retail-side labor) |
| Testing and compliance costs directly tied to a batch | Security, insurance and professional/legal fees |
| Freight-in on inventory purchases | Software, POS and administrative subscriptions |
This is a general pattern, not a ruling on any specific line — the correct classification always depends on your business's own facts, and a genuinely mixed-activity operator will see cases that don't sit cleanly on either side.
Vertically integrated operators and mixed activity
A cultivator-retailer under one roof faces the hardest version of this problem: a single facility cost — rent, a shared utility bill, an operations manager's salary — genuinely serves both a COGS-eligible cultivation activity and a non-deductible retail activity, and has to be allocated between them on some reasonable basis rather than tagged wholesale to either side.
Lines that plausibly need this kind of allocation are flagged for review rather than tagged with false confidence to one side or the other — this is exactly the category of decision that benefits from a cannabis-experienced CPA's judgment, informed by a consistent, complete read of every vendor line rather than a spot-check of the largest ones.
Three confidence levels
| Level | When |
|---|---|
| High | A recognized inventory or direct-production vendor and description pattern, or a recognized overhead vendor and description pattern, with no conflicting signal. |
| Medium — needs review | A plausible pattern on either side, but with a mixed-activity, shared-cost, or ambiguous description signal present. |
| Unclassified | No pattern resolves confidently — left for manual classification rather than guessed at. |
When a line genuinely can't be classified automatically
Some lines are always going to need a person's judgment — a shared facility cost on a vertically integrated operation, a new vendor with no established pattern, a one-off cost that doesn't resemble anything routine. Those stay visible in their own review group rather than being folded into whichever side of the ledger happens to look more favorable.
In practice, this group is where a cannabis-experienced bookkeeper or CPA spends their actual judgment time — reviewing a focused list of genuinely ambiguous lines instead of re-checking every invoice a business generated that month.
How it works
Upload vendor invoices and bank statements
Whatever the dispensary already has — supplier invoices, checking and merchant-processor statements.
Every line is read
Vendor, description, amount and existing category where present, kept linked to its source document.
Classified against the pattern hierarchy
Vendor, then description, then existing category, then document-wide consistency.
Export
Excel, CSV or JSON, with high-confidence, review-needed and unclassified lines kept as separate groups.
One month's vendor invoices, classified
A single-location dispensary's vendor activity for a typical month, read and classified.
| Result | Lines |
|---|---|
| Classified COGS, high confidence | 112 |
| Classified OPEX, high confidence | 84 |
| Needs review — mixed or ambiguous | 17 |
| Unclassified | 3 |
196 of 216 lines resolve without a person touching them. The 20 that don't are exactly where a bookkeeper's time belongs — a handful of shared facility costs and two new vendors with no established pattern yet, rather than a full re-read of every invoice the business generated that month.
Why COGS is where cannabis audits focus
Because COGS is the only deduction 280E leaves standing, it's also the line an IRS examiner scrutinizes most closely on a cannabis return — an overstated COGS figure is the most direct way a business's effective tax rate could look artificially low relative to its actual gross receipts. Consistent, well-documented, line-level classification is what makes that figure defensible if it's ever examined, rather than a single aggregated number with no visible trail back to the invoices that built it.
What accuracy actually looks like
A retail-only dispensary with a small, stable set of wholesale suppliers sees most vendor activity classify at high confidence quickly, since the vendor patterns repeat month after month. A vertically integrated operator with cultivation, processing and retail under one structure sees a meaningfully larger review queue — not because the classification is working poorly, but because genuine mixed-activity allocation is a harder question that deserves a person's attention.
That distinction is worth holding onto: a larger review queue for a complex operator is an honest reflection of how much genuine judgment the business's own structure requires, not a sign something's broken.
Improving classification consistency over time
The fastest way to shrink the review queue is consistent vendor and description discipline on the source documents themselves — a supplier invoice that itemizes flower, packaging and delivery separately classifies far more cleanly than one lumped into a single line labeled “product order.” Asking regular vendors for that level of itemization, once, tends to pay off on every subsequent invoice from them.
What you get back
One row per classified line
Vendor, description, amount, classification and confidence level, each in its own column.
Review queue kept separate
Ambiguous and mixed-activity lines visible as their own group, not folded into a total either way.
Traceable to source
Every classified line linked back to the exact invoice or statement it came from.
Who this is for
Any licensed cannabis business filing a federal return under 280E — single-location retail dispensaries, vertically integrated cultivator-retailers, and the cannabis-specialized bookkeepers and CPAs who classify this activity for several clients at once and need a consistent starting point across all of them.
Handling seasonal and end-of-harvest inventory costs
A cultivator's costs don't arrive evenly across the year — nutrients, labor and utilities accumulate through a grow cycle, and a large share of what's genuinely COGS for a given batch is incurred well before that batch is ever sold. Classifying each cost as it's paid, tagged to the batch or cycle it belongs to where that information is available, produces a far more accurate picture than classifying by calendar month alone.
This matters specifically at year-end, when a batch still in cultivation carries real, already- incurred COGS-eligible cost that hasn't yet become a completed sale. Consistent, transaction-level classification throughout the year is what makes that year-end inventory valuation possible at all — a business that only classifies in a year-end batch has no real way to separate what's tied to inventory still on hand from what's tied to product already sold.
What happens when a classification needs to change later
A first-pass classification is sometimes revised — a vendor initially tagged as a general supplier turns out to be a cultivation-specific one once more invoices establish the pattern, or a CPA's review during filing prep reclassifies a handful of lines after a closer look. That's a normal, expected part of the process, not a sign the original classification was careless.
What matters is that a revision is itself documented — when it happened, why, and by whom — rather than silently overwriting the original tag with no trail. A classification history that shows “originally tagged OPEX, revised to COGS on review, because” is more defensible under examination than a final number with no visible history at all, even when the final number is identical either way.
Where this stops
This classifies vendor and bank transaction lines against typical COGS and OPEX patterns — it doesn't file a tax return, compute a final tax liability, or substitute for a cannabis-experienced CPA's sign-off on your business's specific 280E position, especially anywhere mixed-activity allocation is involved. What it does is make that CPA's review faster and more consistent, by arriving with every line already sorted and the genuinely hard cases already flagged.
For the reasoning behind why this classification matters as much as it does, see why 280E makes cannabis bookkeeping different.
