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:
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.