Differentiator

Profit math you can check, order by order.

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.

How the numbers stay right

Real-time webhooks

Every order create, update, refund, and cancel is processed within 2 seconds via Shopify webhooks. No batch delays.

365-day historical backfill

On install, we pull a full year of order history via paginated GraphQL. You see your profit from day one.

Multi-currency

Daily exchange rates with 6 decimal precision. Revenue in CAD, ads in USD, store in EUR — all handled.

Complex order handling

Voided, edited, disputed, partially refunded, tax-included, tax-exempt, test orders — all tracked and flagged.

Pre-calculated at ingestion

Profit is calculated when each order arrives and stored. Dashboard reads are simple SUMs — fast and consistent.

Payment fee priority chain

Configured gateway rates → Shopify data → plan-based estimate. You control the accuracy of fee calculations.

Calculated the way you'd do it by hand

Per-order calculation at ingestion

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.

Line-item level discount allocation

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.

Real gateway fee extraction

We pull the actual fee from Shopify's transaction data (card type, processor, region) instead of using estimates. True Amex fee ≠ true Visa fee.

Multi-currency with daily rates

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.

What other apps get wrong

Estimated gateway fees

up to 15% error

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.

Missing discount allocations

inflates product margins

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.

Monthly avg exchange rates

compounds over time

Using Jan's CAD/USD rate for transactions in Feb creates systematic error. Daily rates ensure every transaction is converted correctly.

P&L Waterfall
Revenue to Net Profit
Net Margin
27.1%
Costs
Margins
CM1
$31.9K
66.0%
CM2
$24.4K
50.5%
CM3
$16.3K
33.7%
CM4
$13.1K
27.1%

Reconciliation built in

Cash received vs expected

NetNet shows what Shopify says you've received vs what orders suggest you should have received. Catch missing deposits immediately.

Outstanding amounts

Pending orders, voided transactions, and disputed charges are flagged. Know exactly how much cash is still incoming.

Refund tracking

Full and partial refunds reduce profit. We track refund status (pending, rejected, accepted) so your numbers never drift from reality.

Dispute handling

Chargebacks and disputes lock the order as disputed. You can't accidentally count revenue that's under legal challenge.

Why every figure shows its working

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.

Where the numbers are estimates, and how you can tell

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.

Scale profitably.

Know what every order made you.

Install Free on Shopify