NetNet calculates every order from its actual costs — the same math you'd do by hand. Real-time processing, multi-currency support, and every edge case handled. Open any order and audit the numbers yourself.
For DTC brands that need to defend a profit figure — to a partner, an accountant, or themselves. Every number here reconciles to a document you can pull.
Every order create, update, refund, and cancel is processed within 2 seconds via Shopify webhooks. No batch delays.
On install, we pull a full year of order history via paginated GraphQL. You see your profit from day one.
Daily exchange rates with 6 decimal precision. Revenue in CAD, ads in USD, store in EUR — all handled.
Voided, edited, disputed, partially refunded, tax-included, tax-exempt, test orders — all tracked and flagged.
Profit is calculated when each order arrives and stored. Dashboard reads are simple SUMs — fast and consistent.
Configured gateway rates → Shopify data → plan-based estimate. You control the accuracy of fee calculations.
Profit is calculated the moment each order arrives (via webhook or historical import), not aggregated from monthly totals. Every order gets its own profit snapshot.
If an order has a 10% discount, we allocate it proportionally across each line item by revenue. This affects both COGS and gross profit accurately.
We pull the actual fee from Shopify's transaction data (card type, processor, region) instead of using estimates. True Amex fee ≠ true Visa fee.
Revenue in CAD, ad spend in USD, store default in EUR? We convert each using the daily exchange rate for that transaction date — not monthly average.
Most apps use Shopify's default rates. Real fees vary by processor, card type, and country. Over a year, 15% error on fees compounds into thousands.
A $100 order with a $10 discount on one item means that item's margin is overstated. Most apps don't allocate discounts per line item.
Using Jan's CAD/USD rate for transactions in Feb creates systematic error. Daily rates ensure every transaction is converted correctly.
NetNet shows what Shopify says you've received vs what orders suggest you should have received. Catch missing deposits immediately.
Pending orders, voided transactions, and disputed charges are flagged. Know exactly how much cash is still incoming.
Full and partial refunds reduce profit. We track refund status (pending, rejected, accepted) so your numbers never drift from reality.
Chargebacks and disputes lock the order as disputed. You can't accidentally count revenue that's under legal challenge.
A profit number you cannot check is a number you cannot act on. If the dashboard says the month made a certain amount and you have no way to see how it got there, the only options are to believe it or to rebuild it in a spreadsheet — and the second is what most people end up doing.
So every total decomposes. Net profit opens into the layers above it, each layer opens into its cost heads, and each head traces to the orders and rules that produced it. The breakdown is generated from the same calculation as the total, not assembled separately, which means the two cannot disagree.
That constraint is load-bearing. An earlier version of the order ladder was assembled independently of the calculator and drifted from it — the total deducted nine costs and the itemisation showed six. The fix was not better testing but removing the second code path entirely.
Some inputs are exact: revenue, refunds and discounts come from Shopify; label costs come from the carrier; ad spend comes from the platform; payment fees come from your configured rates or from Shopify's own reporting.
Others are necessarily modelled. A variant with no cost entered is estimated from your default margin and displayed with a marker so it reads as an estimate rather than a fact. A payment fee with no matching rate falls back to a plan-based figure. Shipping without a connected carrier uses the rules you set.
The distinction is shown rather than smoothed over, because an estimate labelled as one is useful and an estimate presented as a measurement is not. Coverage indicators exist for the same reason: knowing that most of a period is exactly costed is different information from knowing the total.