
Why Cannabis Accounting Is a Distinct Discipline
A generic bookkeeper working from default accounting software categories will misclassify enough transactions to create a materially wrong 280E position, an unreliable Average Market Rate excise calculation, and a chart of accounts that cannot support a bank loan application or an equity raise. Colorado's dual state-and-federal framework means the books have to serve two masters that do not agree on what counts as deductible, and a third — the Marijuana Enforcement Division — that does not care about deductibility at all and cares intensely about whether the physical inventory matches the state's tracking database.
For a licensed operator, whether a single Colorado Springs medical store or a multi-license cultivation and manufacturing group in Denver, the accounting system has to simultaneously support MED compliance reporting, federal 280E cost segregation, Colorado's state 280E subtraction, Average Market Rate excise computation, and normal accrual-basis management reporting. Those five outputs draw on the same underlying transactions but slice them differently. If the slicing happens at year-end in a spreadsheet, every one of the five is weaker than it needs to be.
The organizing principle for everything that follows is transaction-level cost isolation. Every dollar that enters the business should be coded, at the moment it is recorded, to a cost object — a cultivation batch, a manufacturing run, a retail location, or corporate — and to a cost character: direct material, direct labor, indirect production cost, or non-production operating expense. Allocation performed at the point of entry is defensible. Allocation performed in April is an estimate you will be asked to justify.
COGS Optimization Under IRC Section 471-11 for Licensed Producers
280E disallows deductions but does not reach cost of goods sold, because COGS reduces gross receipts rather than operating as a deduction. For a Colorado producer — a Retail or Medical Marijuana Cultivation Facility, or a Marijuana Products Manufacturer — the inventory costing rules of Treasury Regulation Section 1.471-11 therefore define the boundary of the entire planning space. What the regulation permits you to capitalize into inventory survives; what falls outside it is disallowed operating expense.
Section 471-11 governs the full absorption method for producers, and it sorts production costs into three buckets. Category 1 indirect production costs must be capitalized into inventory in all events: repair and maintenance of production facilities and equipment, utilities attributable to production, rent of production facilities and equipment, indirect labor and production supervisory wages including basic compensation and overtime, indirect materials and supplies, tools and equipment not capitalized, and costs of quality control and inspection. Category 2 costs must not be capitalized: marketing, selling, advertising, and distribution expenses, general and administrative expenses attributable to the business as a whole, and officers' compensation not attributable to production services. Category 3 costs are those whose treatment follows the taxpayer's financial statement treatment, including certain depreciation in excess of book, taxes, and portions of employee benefit costs.
The practical consequence for a Colorado licensee is that the accounting system must be able to answer, for every cost, which of those three categories it belongs in and what evidence supports the assignment. This is where most operators leave money on the table. Cultivation supervisory labor is frequently expensed as payroll when it is Category 1 indirect production cost. Quality control and testing coordination costs are frequently expensed when the regulation names them as capitalizable. Repair and maintenance on grow rooms, HVAC servicing on flower rooms, and utilities metered to extraction space are all capitalizable — but only if the underlying invoices and meter data are coded to production at the time of entry rather than swept into a single facilities expense account.
Direct costs are the easy part and still get mishandled. Direct materials for a cultivation operation include nutrients, growing media, rockwool or coco, pest management inputs consumed in production, and the packaging that becomes part of the finished saleable unit. Direct labor includes wages of employees performing cultivation tasks — transplanting, defoliation, trimming, harvest, and drying — including related payroll taxes and, under the Category 3 rules read together with the taxpayer's book treatment, the associated benefit loads. Extraction and infused-product manufacturing add solvent, ethanol recovery losses, terpene and cannabinoid inputs, emulsifiers, and the labor of extraction technicians and kitchen staff.
There is a hard structural point that must not be missed: a retail-only Colorado licensee is a reseller, not a producer, and its inventoriable cost is essentially the invoice cost of product acquired plus the excise tax borne and the direct costs of acquisition. A retailer that attempts to absorb store labor, store rent, and store utilities into COGS is taking a position that the Tax Court has repeatedly rejected. This is why vertically integrated Colorado structures matter so much economically — production activity is where the capitalizable cost base lives, and the entity that performs production is the entity that gets to carry those costs into inventory.
Finally, capitalization is only half the calculation. Costs capitalized into inventory relieve to COGS when the product is sold. An operator with a growing inventory balance and no discipline around costing methodology, absorption rates, and period-end variance disposition will report a COGS figure that bears no reliable relationship to what was actually sold. Set the absorption rates annually, review them quarterly against actual production volume, and dispose of over- and under-absorbed overhead through a documented, consistently applied method.
- Capitalize Category 1 indirect production costs — production utilities, production rent, indirect and supervisory production labor, repairs and maintenance, quality control and inspection.
- Never capitalize Category 2 costs — selling, marketing, advertising, distribution, general and administrative, and non-production officer compensation.
- Treat Category 3 costs consistently with the financial statements and document the book conformity that supports it.
- Treat retail licenses as resellers; production entities carry the capitalizable cost base.
- Set absorption rates annually, test them quarterly, and dispose of variances with a documented method.
General Ledger Code Architecture: Separating Cultivation Labor, Biomass Packaging and Extraction Utilities
The chart of accounts is where costing theory becomes an operational reality. A Colorado multi-license group needs a segmented code structure, not a flat account list. The workable pattern is a four-segment code: entity, license type and location, natural account, and cost object. Entity distinguishes the legal filer. License type distinguishes cultivation, manufacturing, medical store, retail store, and corporate. The natural account is the expense or revenue itself. The cost object is the batch, run, or department that ultimately carries the cost.
Within the natural account segment, build blocks that map directly to the 471-11 categories so the tax computation is a report rather than a project. A workable block scheme reserves the 5000s for direct materials, the 5100s for direct production labor, the 5200s for Category 1 indirect production costs, the 5300s for capitalized packaging that becomes part of the saleable unit, the 5400s for excise tax borne on acquired product, the 6000s for Category 2 selling and marketing, the 7000s for general and administrative, and the 8000s for costs whose classification is genuinely mixed and requires an allocation driver at period end.
Cultivation manufacturing labor should never share an account with retail labor or administrative payroll. Give cultivation direct labor its own account, give cultivation supervisory and indirect labor a separate Category 1 account, and give post-harvest processing labor — trimming, drying, curing, bucking — its own account again, because the trim line is frequently the largest single labor pool in a Colorado grow and its allocation between direct and indirect production labor is a question examiners ask by name. Time capture should post to these accounts through activity codes on the time clock, so that a single employee who spends a shift split between flower room and packaging generates two coded entries rather than one guess.
Raw biomass packaging inputs need to be split from marketing packaging. Containers, child-resistant closures, humidity control packs, and compliance labels that travel with the product to the consumer are inventoriable and belong in the 5300 block. Branded shopping bags, promotional inserts, point-of-sale display materials, and sample packaging are selling expense and belong in the 6000 block. A single 'packaging' account that mixes both is one of the most common and most easily corrected sources of an inflated disallowed-expense figure.
Extraction facility utilities require sub-metering to be worth anything. Extraction rooms, HVAC serving production areas, and dehumidification loads are Category 1 production costs; the front office and retail floor of the same building are not. Install sub-meters on production circuits, record monthly readings as a formal close task, and post the utility invoice split by measured consumption rather than by a floor-area percentage. Measured allocation is defensible on its face; percentage allocation invites an argument about the percentage. Where sub-metering is genuinely impractical, use a documented engineering estimate of connected load with a dated basis memo, and refresh it whenever equipment changes.
Round the structure out with dedicated liability accounts by tax type — 15% retail marijuana excise, 15% retail marijuana sales tax, 2.9% state sales tax on medical sales, and one account per local jurisdiction — and dedicated revenue accounts split by retail, wholesale transfer, and medical versus adult-use. When each tax layer has its own liability account and each revenue stream its own revenue account, the monthly return reconciliation becomes a two-line tie-out instead of an investigation.
- Use a four-segment code: entity, license type and location, natural account, cost object.
- 5000s direct materials, 5100s direct production labor, 5200s Category 1 indirect production, 5300s inventoriable packaging, 5400s excise borne, 6000s selling, 7000s G&A, 8000s allocable mixed cost.
- Split cultivation direct labor, cultivation supervisory labor, and post-harvest processing labor into distinct accounts fed by time-clock activity codes.
- Separate inventoriable product packaging from branded marketing packaging in different account blocks.
- Sub-meter extraction and production utility circuits and post invoices by measured consumption, not floor-area percentage.
- Give every tax layer and every local jurisdiction its own liability account.
The 10-to-15 Day End-of-Period Ledger Close Checklist
A cannabis close is not a normal small-business close with extra steps bolted on. It has to produce a Metrc-reconciled inventory position, a 280E allocation refresh, a multi-jurisdiction tax reconciliation, and management reporting, all within a window short enough that the numbers still inform decisions. The following sequence targets a fifteen-business-day close for a multi-license Colorado group and can be compressed toward ten as the controls mature. Each day is a gate: the next step does not start until the prior owner signs off.
- Day 1 — Cut-off enforcement. Freeze the prior period in the accounting system and the POS. Confirm the last transfer manifest, last sale, and last production entry recorded in the period, and document any post-cut-off entries requiring accrual.
- Day 2 — Cash and cash handling. Reconcile every bank account, vault, drop safe, and register till. Count cash on hand against the cash log with two-person verification and document variances by location.
- Day 3 — Revenue tie-out. Reconcile POS gross sales to the general ledger by location, by medical versus adult-use, and by tax rate. Investigate any variance greater than the documented tolerance before proceeding.
- Day 4 — Metrc data pull. Export the full period package, transfer, adjustment, harvest, and sales report set from Metrc as read-only evidence and archive it with a timestamp. This is the population against which everything else is tested.
- Day 5 — Physical inventory count. Complete cycle or full counts by license and by room, recording weights on the same scales used for Metrc entry, with count sheets signed by the counter and a reviewer.
- Day 6 — Metrc-to-physical reconciliation. Match counted weights and unit counts to Metrc package balances, list every discrepancy, and route each to a documented cause. Do not adjust before the cause is identified.
- Day 7 — Metrc-to-general-ledger reconciliation. Roll Metrc quantities into ledger inventory at standard or actual cost and reconcile the resulting inventory balance to the trial balance by license entity.
- Day 8 — Production cost absorption. Post direct materials, direct labor from activity-coded time data, and Category 1 indirect production costs to open batches and runs; close completed batches and relieve to finished goods.
- Day 9 — Overhead and utility allocation. Post sub-metered production utilities, production rent, repairs and maintenance, and supervisory labor using the standing allocation memo; calculate and dispose of absorption variances.
- Day 10 — Excise tax computation. Determine arm's-length status for each transfer, apply contract price or the current quarter Average Market Rate by Metrc product category, and reconcile computed excise to the accrual account.
- Day 11 — Sales and local tax reconciliation. Tie collected tax by rate and jurisdiction to the liability accounts, verify medical exemption support, and confirm gross receipts consistency between state and self-collecting city filings.
- Day 12 — 280E allocation refresh. Update square footage, activity-coded labor, and metered overhead allocations; refresh the disallowed-expense schedule by category and the parallel Colorado subtraction schedule.
- Day 13 — Intercompany and related-party review. Confirm intercompany transfers are recorded on both sides at consistent pricing, eliminate for consolidation, and document the transfer pricing basis.
- Day 14 — Accruals, reserves and review. Post payroll, interest, rent, professional fee and tax accruals; review inventory for shrink, spoilage and expiring product reserves; complete the controller review of all balance sheet reconciliations.
- Day 15 — Reporting and archive. Issue the management reporting package with COGS, gross margin by license, cash position, tax accruals and Metrc variance summary, then lock the period and archive the workpaper set with sign-offs.
Metrc Reconciliation: Matching Physical Warehouse Weights to the State Database
Colorado was the first state to run seed-to-sale tracking on Metrc, and the Marijuana Enforcement Division treats the tracking record as the authoritative statement of what a licensee holds and has moved. Two consequences follow. First, a variance between physical inventory and the Metrc package balance is a compliance exposure regardless of whether the underlying product was ever at risk. Second, because inventory drives cost of goods sold, an unreconciled Metrc position also undermines the 280E computation and the excise base at the same time. One reconciliation protects three exposures.
Run the reconciliation at the package level, not the summary level. Pull the Metrc package report for the license and period, filtered to active packages, with package tag, item name, item category, current quantity, unit of measure, source harvest or production batch, and last modified date. Against that, place the physical count: tag scanned, gross weight, tare weight, net weight, and the identity of the counter. Match on the tag. Any tag in Metrc without a physical match, and any physical package without a Metrc tag, is a finding before any weight is even compared.
Where tags match, compare net weight against Metrc quantity and classify each variance by cause rather than netting them. Moisture loss during drying and curing is a legitimate and expected variance for wet-to-dry conversions and should be recorded as a documented harvest adjustment tied to the harvest batch, with the drying method and duration noted. Trim and waste removed during processing is production yield loss, recorded against the batch and reconciled to the waste disposal record. Scale calibration drift is a measurement variance and is corrected by re-weighing on a calibrated scale, not by adjusting the record. Data entry error is a records variance, corrected in Metrc with a reason code and a note identifying the original entry. Genuine unexplained loss is the residual and is the only category that should ever be small.
Manufacturing shrink deserves specific handling because it is where defensibility is most often lost. An extraction run converting biomass to concentrate produces a mass reduction that is inherent to the process, not a loss of product. Handle it by establishing an expected yield range for each process and input quality grade, documented in a standing yield memo, and then recording actual input weight, actual output weight by output type including spent biomass and byproduct, and the resulting yield percentage for every run. A run inside the documented range is explained by the memo. A run outside it requires a written variance explanation from the production supervisor at the time of the run, not months later. That contemporaneous record is what converts shrink from an unexplained inventory loss into a documented process characteristic, and it is equally persuasive to a MED investigator and to an IRS examiner testing COGS.
Set variance tolerances in advance and in writing — by product form, since flower, trim, concentrate and infused product behave differently — and require investigation and sign-off for anything outside tolerance. Adjustments in Metrc must be posted with the correct reason code and must be mirrored in the general ledger in the same period, with the offsetting charge going to the correct account: yield loss into production cost, spoilage and expired product into a reserve or waste account, and theft or unexplained loss into a separately identified account that management actually reviews.
Close the loop with transfer manifests. Every incoming manifest should tie to a purchase entry with matching weights and package tags; every outgoing manifest should tie to a sale or transfer entry and, where applicable, to the excise computation. Manifests are the single most directly comparable data set between your ledger and the state's, so a monthly manifest-to-ledger tie-out is a low-cost control with a very high protective value.
- Reconcile at the package-tag level with a full Metrc export archived as timestamped evidence.
- Classify every variance by cause — moisture loss, processing yield loss, scale drift, data entry, unexplained — and never net them together.
- Maintain a documented expected-yield memo per process and record input weight, output weights and yield percentage for every extraction and manufacturing run.
- Require contemporaneous written variance explanations for out-of-range runs; retroactive explanations carry little weight.
- Mirror every Metrc adjustment in the general ledger in the same period, coded to yield loss, spoilage reserve, or unexplained loss.
- Tie every incoming and outgoing transfer manifest to a ledger entry monthly, and to the excise computation where applicable.
