Every ERP (enterprise resource planning) starts with an invoice somebody typed. CarinaOS starts with the plant — because it already holds your compliance record. The transfer you filed becomes the invoice. The package you shipped remembers the harvest that grew it. The cost follows the plant all the way to the sale.
Screens from a running facility. Thirteen tabs — purchasing, overheads, inventory, sales and AR, costing, labor, transfers, documents, history, QuickBooks, reports and setup — sitting on the same record as your compliance data.
Invoiced, collected, billed, paid out, net cash, labor, inputs, stock value, packaged pounds, wet weight, plants, cost per pound, cost per gram. Tick any of them and they land on the same timeline — each unit on its own axis, fitted to what you selected.
The gap between two lines is usually the answer. Invoiced against collected is your receivable, drawn. Billed against paid out is what you owe. Inputs against packaged pounds is your cost per pound before anybody calculates it.
And you can measure it by cycle — by the run, not the calendar month, because a crop does not respect the first of the month. Daily, monthly, year to date and any range are there too. The cycle is the one no accounting package can offer, because none of them know when you flipped.
A period that packaged nothing has no cost per gram. It reads as blank, not as zero — a zero would say you grew it for free and drag every average that follows.
“Am I profitable, and is that the same as being cash positive?” “Which strain actually makes money?” “Are customers paying slower than they were?” It reads the same numbers you are looking at and answers from those alone.
It knows what a cultivation P&L is. That revenue is lumpy because harvests are, so a month with no crop down is normal rather than a collapse. That profitable and cash positive are different questions. That 280E makes the COGS split a tax position — which it flags and sends to your CPA, because that call is theirs.
It answers from your figures or it says it cannot. A facility with nothing entered is told there is nothing to analyze, rather than given something that sounds right.
Every system here can already tell you cost per gram went up. None of them can tell you why, in the sentence you would actually repeat to your partner. CarinaSense™ writes that sentence — the same analyst you ask questions of, now producing the standing reports as well.
The same analyst, asked a standing question. These are not a second AI feature bolted on beside the chat. A report is CarinaSense™ reading the same books, under the same rules, against a question you would otherwise have to remember to ask every month — so the answer arrives without anybody remembering.
The numbers are never the model’s. This is the rule the whole thing is built on, and it is what makes a generated finance narrative safe to forward. Every figure in every report is computed in our own code from your data, then handed to CarinaSense™ as a finished table. Its job is to explain, compare and flag — and re-deriving a number is treated as a defect, not a fallback.
It reads exactly what you can see. A report is assembled through your own login, against the same endpoints the tabs draw from. So it cannot quote a figure you could not open the tab and check for yourself, and it cannot drift from what the screen says.
The figures survive the writing. If the analyst is unreachable, the report still renders — every number, no commentary. The analysis is an addition to the statement, never a dependency of it.
And it is asked for, not fired off. Nothing is generated when you open a tab. You press a button, because a paragraph you did not ask for is one nobody reads.
How the business is doing over the last 90 days — where the money is, which way unit cost is moving, and the two or three things that need a decision. The one you forward.
Why cost per gram moved — split exactly into how much came from spending more and how much from harvesting less. Two different problems with two different answers.
One flowering cohort read as a business result, with revenue and cost joined to the batch that grew it.
This month against last, plus the list of what still has to be tidied before anyone signs it off.
What has to be ordered, when, and what it will cost — priced from what you actually paid last time.
Duplicate bills, input price spikes, and anything sold below what it cost to grow.
The sixth is CarinaSense™ open on Finance — the same grounding, the same books, for the questions no standing report anticipates.
Sample figures for a 12,000 sq ft indoor operation running perpetual harvest — but the arithmetic below is the real thing, produced by the same code that runs in the product.
What to check
| This month | Prior | Change | |
|---|---|---|---|
| Revenue | $412,800 | $388,500 | +$24,300 |
| Cost of goods sold | $156,000 | $128,000 | +$28,000 |
| Gross profit | $256,800 | $260,500 | −$3,700 |
| Operating costs | $96,300 | $94,100 | +$2,200 |
| Net | $160,500 | $166,400 | −$5,900 |
What to check
Measured against the median, not the average — one bad month in the history would drag an average up far enough to hide the next spike behind it.
The tables and figures above come from the product’s own calculation code, run on sample data for this page. The written paragraphs are illustrative of the format — what CarinaSense™ writes for you is generated from your own figures at the moment you ask.
Because CarinaOS also reads your flow meter, it can derive the same cost a second, independent way — and the gap between the two is the finding.
Your input cost comes from purchases: opening inventory, plus what you bought, minus what’s left, straight off the vendor bills and the inventory ledger. That is exact, auditable to the invoice, and it reconciles to QuickBooks.
But metered gallons multiplied by the dose recipe in force that day, priced at what you actually paid per pound, gives the same number by a different route.
Two independent derivations. The gap is the finding. A widening variance is a spill, a leak, a miscount, an unbilled delivery, or a feed chart that no longer matches what the room is really being fed.
The operational ERPs don’t own the sensors. The accounting platforms don’t own the grow. This check needs both sides of the meter.
No meter? The costing still works — purchases are the source of the total either way. The meter adds attribution and the cross-check, not the number itself.
Inputs come off a bill and weight comes off Metrc, but hours are typed in on Friday from memory — so the cost per gram inherits a guess. A PIN pad on a tablet by the door fixes that at the moment the work happens.
Clocking out writes a costed entry, not a timesheet row. They tap the crop first — cycles still in flower, offered by name rather than typed. Clocking out prices the shift at that person’s rate for that day and puts it on that crop, where it becomes part of its cost per gram. Nothing is re-keyed, and there is no export step to forget.
And general labor is a choice, not a blank. Not every shift is on a crop, so there is a button that says so — which is how an approver tells real overhead from somebody who forgot to tap. Untagged time is still recorded; it just lands as administrative labor, named rather than buried.
Rates are effective-dated, so history stays true. A raise in March does not retroactively rewrite what January cost. The shift is priced at what that person was actually earning on the day they worked it.
Clocked hours are not approved hours. They sit pending until somebody signs them off, and only approved hours reach a cost per gram — otherwise your unit cost would move every time a shift was mistyped.
It refuses to invent a number. A shift left open overnight is a forgotten clock-out, not a sixteen-hour day. It closes, records nothing, and says so — a plausible figure nobody can vouch for is worse than a gap somebody has to fill in.
And the same clock-out reaches payroll. Approved hours go to QuickBooks as time entries, per person per day, carrying the crop and the task — so payroll works out the pay from its own rates and taxes, and no wage figure leaves CarinaOS. A timesheet app can send hours too; it cannot say which crop they were spent on, because it has never seen your grow. Needs QuickBooks Online Essentials or higher; on Simple Start the labor report and the journal do the same job.
Built as a system of record from the start — versioned, audited at the database, and isolated per facility.
Every transfer in and out, with its packages, counterparties and dates. Inbound becomes a vendor bill, outbound becomes a sales invoice — and it won’t let you confuse the two.
Customers, sales orders, invoices and payments — most of them born from a manifest rather than a keyboard.
Revenue against real batch cost, resolved to strain, customer, package and room — with the uncosted lines named, not hidden.
Cost per cycle, per batch and per gram, with overhead carried in and the harvest weight taken from Metrc rather than typed.
Vendors, items, purchase orders and receiving. Received quantity is derived from the ledger, never a field somebody can overwrite.
Upload a PDF or photograph an invoice; the lines are extracted for you. Confirming a match teaches it, so the second bill from a vendor is one click.
Append-only and double-entry. Stock arriving from outside balances against a system location, so the books always net to zero and history can’t be rewritten.
A PIN pad on a shared tablet, or one button on their own phone. Clocking out prices the shift at that person’s effective-dated rate and lands it on the batch — so a raise in March doesn’t retroactively rewrite what January cost. See it →
A real general ledger with journals and a derived profit and loss statement, 280E-aware. Not an export — it lives in the platform.
Invoices, bills, payments, customers, vendors and items round-trip to QuickBooks Online — posting to real company files today. A connect wizard reads your own chart of accounts, dry-runs first, and refuses to post anything unmapped.
Works on every QuickBooks Online plan, Simple Start included. Pushing approved hours as time entries — so QuickBooks Payroll works out the pay — needs Essentials or higher, because Simple Start has no time tracking. On Simple Start the labor report and the journal cover it.
Four levels — none, timekeeping, operations, full. Your head grower can run purchasing without ever seeing payroll, and a trimmer can clock in without seeing either.
Every change writes an append-only audit row with the actor, at the database layer — not in application code that can be bypassed.
One engine between what you spend and what you sold — reconciled against Metrc and QuickBooks, and allocated to the cycle that consumed it. Compliance, sales, accounting and costing are the same events looked at four ways; CarinaOS is the only place they all already live, so it can join them instead of asking you to re-key them.
Scroll the diagram sideways →
Illustrative figures — 107.0 lb off the cycle, $33,944.80 of cost carried into it.
Taken from their own published documentation — checked August 2026, and the reporting and AI rows re-checked September 2026 — including the half of it that is table stakes rather than an advantage. It is long because it is specific.
Anyone who tells you batch costing is exotic is selling you something. Canix carries labor and material cost through veg → flower → harvest, then applies it proportionally to the child packages by weight. Flourish reports cost at production, run, batch and SKU level. So do we. It is the price of entry in this tier, not a reason to switch.
| Capability | Canix / Flourish | CarinaOS |
|---|---|---|
| Metrc lifecycle: batch → harvest → package → transfer | Yes | Yes |
| Materials and labor attached to a plant batch, carried to the harvest | Yes | Yes |
| Cost per unit, and margin by strain or SKU | Yes | Yes |
| Purchasing, inventory, sales orders and AR | Yes | Yes |
| A QuickBooks Online integration | Yes | Yes |
| Dashboards, custom reports, exports, and reports emailed on a schedule | Yes | Yes |
| An MCP server, so you can point ChatGPT or Claude at your own data | Yes — both | Yes |
These come straight out of their documentation rather than ours.
| Capability | Canix / Flourish | CarinaOS |
|---|---|---|
| Where the ledger lives | QuickBooks is the ledger — Flourish debits COGS and credits Inventory Asset in QBO; Canix creates invoices in QBO and imports its chart of accounts | Native GL, journals and a derived 280E-aware P&L in the platform. QuickBooks is a sync target, not the book of record |
| Overhead in the cost | Canix’s costing primer scopes it to what you spent “to directly produce your good” — non-cannabis items, cannabis items and labor | Overhead allocated into cost per gram, not left out of it |
| How the numbers arrive | Unit cost × a quantity someone enters, labor hours someone applies, and a CSV/Excel COGS uploader for bulk allocation | Derived from vendor bills and the inventory ledger, hours tagged at entry, metered gallons as the driver |
| Who does the financial analysis — and who is answerable for the arithmetic in it | You do. Canix’s business intelligence is charts, filters, exports and scheduled email; Flourish’s is pre-built dashboards, with “advanced analytics” and custom dashboards listed under Scale at $3,000/mo. Both publish an MCP server and Flourish adds Snowflake and an in-app chatbot — real, and pointed at operations and support. Either way the model reads your rows and does its own sums, and nothing between it and the answer checks them | Six written reports in the product — executive summary, cost variance, cycle P&L, monthly close, reorder outlook, anomaly watch. Every figure is computed in our code and handed over as a finished table: CarinaSense™ explains and flags, and re-deriving a number is treated as a defect. Included in the $100/mo add-on |
| Money checked against physics — metered gallons × the live dose recipe, priced, against what was actually bought | No — neither integration directory lists a single environmental, climate, irrigation or IoT partner | Yes — we read the meter |
The ledger is the structural one. Both platforms are excellent at getting cultivation data into an accounting system; neither is the accounting system. That is a deliberate architecture, and it means your cost detail goes over the wall and the answer comes back later. The meter check is the one nobody can copy without owning both halves — the operational ERPs don’t read your sensors, and the accounting platforms don’t run your grow.
The analysis one is the same shape. An MCP server is a genuinely good thing to ship and both of them have one — but it hands your ledger to a model and lets it do the arithmetic, which is the one job a language model should never be given on money. We took the other half of that problem: the figures are computed here, in code, and the model is handed a finished table to explain. That is why we can put a written close pack in front of a bookkeeper and why an MCP pipe, on its own, cannot.
Flourish publishes its tiers, which we respect — most of this industry doesn’t. Their entry tier is the same headline number as ours, so it’s worth reading what sits underneath it. Canix is in the table too, with every cell it does not publish marked as exactly that. Flourish figures are from their published pricing page, August 2026.
| CarinaOS Full + ERPEverything, one tier | Flourish EssentialsNot comparable | Flourish LaunchClosest equivalent | Canix Cultivation + ERPNot published | |
|---|---|---|---|---|
| Monthly | $350 | $350 | $1,000 | Not publisheddemo required · operators report from ~$1,000 |
| Users included | Unlimited — ten employees cost the same as one | 4 | 10, then $100/mo each | Not published |
| Revenue band | None — we don’t price off your revenue | Under $1M | $1M – $5M | Not published |
| Multi-state | Yes — any live state | Single-state only | Yes | Yes |
| Advanced analytics & dashboards | Included | Not included | Not included — listed under Scale, $3,000/mo | Not published |
| Live sensor telemetry & the AI analyst | Included at every tier | No sensor integrations at any tier | No sensor integrations at any tier | No sensor integrations — hardware list is scales, RFID and label printers |
We’ve left Essentials in the table because the headline number matches ours and you deserve to see that — but it isn’t the same purchase. Four seats, one state and a revenue ceiling rule it out for most operators running a real facility. The honest comparison is Launch at $1,000/mo, and the analytics most cultivators actually want sits a tier above that again at $3,000. Canix does not publish pricing at all — a demo comes first — so every “not published” in its column is exactly that, not a guess. The ~$1,000 figure is operator-reported rather than official, and Canix prices by state, licence structure and facility size, so treat it as a floor rather than a flat rate. Its sensor row comes from Canix’s own published integration directory, where the hardware section lists scales, RFID and label printers.
We’d rather you read this here than find it on a demo call.
| Capability | Canix / Flourish | CarinaOS |
|---|---|---|
| Scope beyond cultivation — manufacturing, distribution, wholesale marketplace | Yes | No — cultivation only, on purpose |
| Bill of materials and multi-stage production runs | Yes | No |
| BioTrack states as well as Metrc | Yes | Metrc only |
| Track record, headcount and integration breadth | Years of it | We’re newer and smaller |
| The ERP module itself | Shipping today | Live today, in beta — general availability Q4 2026 |
Compiled August 2026 from the vendors’ own published documentation — the Canix help center’s costing primer and QuickBooks Online integration guide, and the Flourish documentation on costing and its QuickBooks Online integration, the Flourish pricing page, and both vendors’ published integration directories — neither lists an environmental, climate, irrigation or IoT partner (Canix’s hardware integrations are scales, RFID and label printers). Flourish tier prices, seat counts, revenue bands and inclusions are from its published pricing page. Canix does not publish pricing publicly; the $1,000/mo entry point comes from pricing data shared by operators rather than from a published page, and Canix prices by state, license structure and facility size, so treat it as a floor rather than a flat rate. Absence of overhead allocation reflects what their documentation describes; if it exists and is simply undocumented, we’ll correct this. Note also that Illumify claims native GAAP accounting with 280E-aware COGS, and Viridian Sciences is built on SAP Business One — both at enterprise price points well above this tier. Canix, Flourish, Illumify and Viridian are trademarks of their respective owners and CarinaOS is not affiliated with any of them. If anything here is out of date or wrong, email hello@carinaos.com and we’ll fix it.
NetSuite, Odoo, QuickBooks on its own: hand one an invoice line reading “1 lb flower — $1,200” and it has done its job. It cannot tell you which strain is quietly losing you money.
Start it yourself — 30 days free, no card, nothing to cancel. Or talk to us first.