OpenCart profit reporting

OpenCart knows what you sold. It does not know what it cost you

Which is why every report it ships is a revenue report with the word profit nowhere near it. Profitability Copilot adds the one number OpenCart has no column for, what the goods cost, and works the rest out from figures the store already recorded: payment fees, fulfilment, discounts and returns per order line, against the rent, software and advertising that run whether you sell anything or not. Every line is priced at the moment the order becomes real and never repriced afterwards, and nothing is guessed: a product nobody has costed is excluded and counted rather than silently averaged in.

Get it on the marketplace Read the documentation

The profit and loss screen. Across the top, revenue ex-tax $4,880.00, net profit $552.79 and net margin 11.3%. Under “What to look at first”, a best-seller that brought in $2,880.00 and kept $266.84 of it, and a flat shipping rate that cost $281.79 to fulfil against $160.00 collected. “Where the money went” lists cost of goods, gross profit, discounts, payment fees, fulfilment, returns, unclassified, contribution margin and expenses. Beside it, “Not configured yet” says 4 of the 52 lines sold have no cost recorded and are excluded from every figure above.
One screen, and the last line of it is the point: four lines nobody has costed are named and excluded rather than averaged in, so the $552.79 above is what the store can account for. The two findings under it were ranked out of the same figures as the table; nothing here is a second set of numbers kept somewhere else.

The one number OpenCart has no column for

A cost per product, typed on the product form or loaded from a CSV, behind a permission of its own so not every admin sees your buying prices. Everything else is worked out from figures the store already recorded. It never guesses: a product nobody has costed is left out of the cost and out of the revenue both, counted, and its sales value reported separately, because counting revenue with no cost against it makes an uncosted product look like your best one.

Priced when the order becomes real, never repriced

Every order line is priced when the order reaches a status you nominated, and is never touched again. A supplier putting their prices up next month does not move last month’s figures, and a cost you correct today applies to what you sell from today. Every figure also carries how much it is worth believing: whether the cost was recorded before the order, derived from a default margin, filled in afterwards, or never recorded at all.

What the sale cost you besides the goods

Payment fees and fulfilment costs from rules you write per method (a percentage, a fixed amount, or both), so a card order and a bank transfer stop looking equally profitable. Discounts come off the same line they were given on.

Rent, software and advertising, spread across the days they cover

Recurring operating expenses as one row each, amortised across the period they pay for rather than landing whole on the day the invoice did, with blended ROAS worked out from the rows you marked as advertising. That is the difference between gross margin and the number your bank balance follows.

Returns, read live from OpenCart’s own records

There is no second list to keep. A return filed in the admin, in the storefront or by another extension counts identically, and editing one corrects the figures on the next page load.

A profit and loss you can drill into, or take away

A dashboard profit and loss, a per-product report that drills through to the order and then to the line, and a CSV of either. It never prints a zero for a figure nobody has answered: an unconfigured number reads as a dash and a prompt, on every screen. Nothing it does runs on a page a customer loads, and it edits no core file.

Your reporting tool can do its own arithmetic

Profitability Copilot answers an HTTP API (v1 today), serving the same figures one day at a time, so the tool that holds your numbers aggregates them itself over whatever period it wants rather than scraping a screen. It only ever reads, and it authenticates as an OpenCart API user you create yourself, answers only over HTTPS, and is off until you switch it on. Switching it on is a decision rather than a setting: an OpenCart API credential cannot be scoped, so every holder of one can then read your purchase prices. What will not change about it, and for how long, is written down.

Translation published, not claimed

Which of our strings a named native speaker has actually read is published per extension and per language, and anything unreviewed ships as English rather than as a blank or a raw identifier.

Three refusals are worth knowing before you buy, and limits and guarantees is where they are written down in full. It never guesses a cost, so a catalogue you have not costed reports a smaller store rather than a wrong one. It never prints a zero for a figure nobody has answered: an unconfigured number reads as a dash and a prompt, on every screen and in the API. And it is not an accounting package: it edits no core file, adds nothing to your storefront, and integrates with no bookkeeping system, so it tells you which products and which orders made you money and leaves filing anything to whoever files it now.

Questions people ask before buying

Where does the cost of a product come from?

You type it on the product form or load a catalogue’s worth from a CSV, behind a permission of its own so not every admin sees your buying prices. Nothing is ever guessed: a product nobody has costed is left out of the cost and out of the revenue both, counted, and its sales value reported separately.

If my supplier puts their prices up, does last month’s profit change?

No. Every order line is priced once, when the order reaches a status you nominated, and is never repriced afterwards. A cost you change today applies to what you sell from today.

Does it work with OpenCart 4?

Every Kyvero extension is built for OpenCart 4.x. Each one declares the lowest release it will install on and refuses to install below it, and its documentation lists the releases a full install-and-upgrade pass was run against.

Do I get the source code?

Yes. An extension is PHP on your own server: readable, not obfuscated, and with no remote licence check to fail. Your copy is yours to modify and to keep backed up.

Who answers when something goes wrong?

A developer, usually the one who wrote the extension. There are two official routes, the support portal and the support address, and both arrive in the same place.