ProfitRoot

Known limitations

Most tools tell you what they can do. Here is what ProfitRoot cannot do yet.

We tested against a real Shopify export. Two of our three assumptions were wrong.

For most of this product's life, ProfitRoot's Shopify parser had never been run against a real Shopify export — every tie-out was against fixtures we wrote ourselves. Then we ran it against a real one, and two of the three assumptions we had been carrying were false:

(a) We assumed Subtotal was PRE-discount (the sum of line gross). It is POST-discount. The real invariant is: Subtotal = SUM(quantity x Lineitem price) - Discount Amount.
(b) We assumed Lineitem price was already net of a line discount. It is GROSS. A line discount is reported separately in Lineitem discount AND aggregated into the order-level Discount Amount.
(c) Test-order detection via Tags held — but it depends on the merchant tagging them. Shopify does not tag test orders automatically.

The consequence, stated plainly: our reconciliation and integrity guards had encoded the false premise. ProfitRoot would have hard-halted on every order carrying a discount — which is to say, on most real stores. It would not have shown a wrong number; it would have refused to show a correct one. That refusal-to-fabricate is why the failure was safe, not silent.

This is fixed. The real export now reconciles to a zero residual, and it is a permanent fixture in our test suite.

What else is not available yet.

Channel / source mix: not available. The Shopify Orders export carries a coarse Source (web, pos, draft order); we do not read it. The granular channel (Online Store / Shopify Mobile / Shop) does not exist as a column at all — so ProfitRoot cannot show revenue by sales channel, and will not invent one.

Returns handling: no returns source exists, and no code consumes a returns file. Contribution Margin is reported before returns handling.

Ad spend: Meta and Google Ads spend come in by upload (one file per platform), as a period total checked against the bill you type in. The two file shapes are documented, not yet observed on a live export. A live Meta or Google Ads connection is not available yet. No attribution: ProfitRoot does not decide which ad earned a sale.

Inventory: an installed store's stock levels are read from Shopify nightly. Cash shows money in and out by week for 13 weeks. No bank balance is read, so there is no cash-on-hand or runway figure.

Payment fees: require payout data. When coverage is partial (some orders are processed elsewhere), it is reported as partial — never completed by assumption.

Gift cards: a gift-card sale is deferred revenue — a liability, not Net Sales, until redeemed. ProfitRoot excludes gift-card lines from Net Sales with an explicit reason. Detection is conservative (the line must be non-shippable AND named as a gift card), so a renamed or mixed gift-card order may not be caught.

Product mix: line-item only. Catalog and variant joins require a Shopify Products export.

SKU coverage depends on the merchant: Lineitem sku is optional in Shopify and many stores never set it. Product cost is matched by SKU, so where a SKU is missing ProfitRoot computes Gross Margin over the covered lines only, reports the value coverage, and NAMES the products that have no cost. It never presents a partial Gross Margin as a complete one, and a partial Gross Margin can never become a complete Contribution Margin.

Granularity: Today reads the last 7 days. Other views compare matching days of each month (for example, 1-27 Dec vs 1-27 Nov). Orders sync nightly; nothing is real-time.

Ask Root, a question box inside ProfitRoot, is coming. It is not available yet.

Operating profit: overhead and tax need an accounting source (QuickBooks or Xero), and ProfitRoot cannot read one yet.

Currency: ProfitRoot assumes a single presentment currency and does not convert. A file that mixes currencies across included orders is rejected with a loud error — it is never silently mis-summed.

Shipping is tested; tax is not yet: on one real Shopify store in September 2026, the orders carried $5.95 of shipping, and ProfitRoot's Net Sales read $123.00, the same as Shopify's own Net Sales, which leaves shipping out (see the Tie-Out report). That record does not show tax on its own, so Net Sales has not yet been tested against a real order that carries tax. Shopify's Subtotal excludes tax by definition, so we believe Net Sales is unaffected — but we have not proven it.

How we maintain this.

This list is maintained honestly. If something here changes, this page changes.

ProfitRoot · © 2026