The Gross Profit report under Reports gives you per-line GP for every sale in a date range. Two views (Summary and Detail) and a number of subtle behaviors that are worth understanding so you know what the numbers mean.
SellTotal — what counts as revenue
Per line, SellTotal is:
SellTotal = (qty × UnitPrice) − TradeConcession − CashDiscount (sold lines)
SellTotal = (qty × TradeInActualValue or UnitPrice) (trade-in lines) In English: realized revenue. The list price isn’t used directly — discounts, adjustments, and trade negotiation markup are all backed out so the number reflects what was actually realized. See Adjustment and Trade-In Negotiation for those mechanisms.
A trade-in reduces the sale. Goods coming in off the customer are a credit against what they owe, so every figure on a trade line is negative — quantity, price, cost, and the Trade Offset that records what the trade is really worth. There’s no separate rule for trades: the same arithmetic yields a negative because the numbers going into it are negative. Its cost side is negative too (you’re taking goods in, not giving them up), so a trade taken in at what it’s actually worth shows a gross profit of zero rather than a loss.
Cost — live, not snapshotted
Cost is computed at report time from the inventory item’s current cost basis + every entry in item_additional_costs (recerts, repolish, repairs, etc.). This means post-sale cost additions roll into GP automatically — if you sent a stone for a recert two months after the sale, the recert cost shows up in GP the next time you run the report.
For misc lines (no inventory item), the snapshot Cost on the line is used.
Cost points the same way the line does. An item’s cost basis is a property of the piece, so it’s always a positive number — but a credit line (a trade-in, or a piece coming back off a previous purchase) is a reversal, and its cost has to read negative alongside its negative revenue. The report signs the live cost to match the line, so a return of a piece that sold for $8,500 and cost $6,500 reads sell −$8,500 · cost −$6,500 · GP −$2,000 — the margin you’re handing back, not more than the piece ever sold for.
Partnership items
A P badge beside the stock number (and beside the invoice number on the Summary view) marks a partnership piece.
By default every row shows full invoice figures, so the report’s totals agree with the dashboard and the sales tax report.
Tick Show partnership sales at our share to see only your share of each partnership line. Subtotal, Cost, Profit and Margin % all switch together, so each row still adds up. For example, a stone sold for $49,500 that cost $25,000, owned 50/50, reads $24,750 · $12,500 · $12,250 · 49.49%. Your share is figured the same way the Partnerships page figures partner payouts:
- Profit: the full profit minus what the partners are paid out of it. Profit-only partners take their percentage first, then owners split the rest.
- Cost: your ownership percentage of the cost. Profit-only partners put in no cost.
- Subtotal: your cost plus your profit.
With the box ticked, the totals are smaller than the sales reports by the partners’ share, and the report’s heading says Partnership sales shown at our share, including when printed, emailed or exported.
When a partner makes the sale, the settlement invoice you write them already is your share (its cost is your basis), so that row reads the same whether the box is ticked or not. See Partnerships (Co-Owned Inventory) for how settlements work.
Refund handling
When a returned item lands on a refund invoice (negative quantity), GP is negative — you’re giving back margin. The ABS(qty) in SellTotal ensures the dollar magnitudes line up, and the cost is signed to match the line (see Cost above), so the GP shown is exactly the margin being reversed.
GP percentage cap
The displayed GP% is capped at ±100% to avoid garbage values from divide-by-near-zero (a $1 sale that nets $50 GP would otherwise show 5000%). The actual dollar GP is uncapped — only the percentage is clamped.
Color coding
Profit dollars are colored by whether you made money — never by the margin. A profit is green however thin it is, a loss is red, and exactly zero is grey. A $6,000 profit on a $91,000 deal is a good day, and the report used to paint it as a warning because the margin worked out to 6.59%.
Margin % is red when negative. It shows amber only when it falls under the Margin Warning % you set in Settings → Organization → Profit Reports — which is blank by default, so nothing is flagged until you choose a number that means something for how you sell. If you do wholesale alongside retail, leaving it blank avoids flagging your whole wholesale book.
Summary vs Detail
Toggle via the view selector (or ?view=summary / ?view=detail in the URL):
- Summary — aggregated totals per category / per salesperson / per store, depending on the active group-by. Useful for “how did we do this month.”
- Detail — every line item on every invoice. Useful for “which deals were the most profitable” or investigating an outlier.
Excel export includes both sheets so the recipient can drill from Summary to Detail.
Status overlay
Each row may show a small badge:
- P — Partnership item (see Partnership items section above for how cost is determined)
- V — Vendor memo item (you didn’t own it; cost basis is the vendor’s price you paid them)
- PV — Both flags
Tips
- For monthly reviews, run Summary grouped by salesperson or category; for spot-checks of a single deal, switch to Detail and filter to that invoice.
- A negative GP on a non-refund row is a red flag — usually a misc line with cost > price or a stone with high additional costs (recut on a sold-as-is basis). Click into the line to see what happened.
- Pad ID columns are zero-padded text in exports (e.g. “000123” not 123) — Excel won’t add thousands-separator commas, and you can paste them into another sheet without losing format.
- For “what did we list this at” vs “what did we realize,” use the Pricing Realization report instead — it’s purpose-built for that comparison.