Not on the App Store yet. Join the waitlist. 50% off month one.

Connect. Measure. Keep.

A 4x ROAS campaign can still lose money on every order. MarginStack shows what is left after COGS, shipping, fees, and ads, per order, SKU, and channel.

Contribution, 14 days

$1,675

After COGS, shipping,
fees and ads

Connect your sources

Read-only access
ShopifyMetaGoogle Ads

50% off month one. Code emailed now.

  • Is Meta still paying for itself?
  • Which SKU is under water after shipping?
  • Can I raise spend this week without losing cash?
Answer them on the sample board

Connects to Shopify on both plans. Meta and Google on Growth.

ShopifyMetaGoogle Ads

Built for the cash a 4x campaign still burns.

ROAS stops at revenue. Contribution keeps subtracting until the bank account agrees.

Open sample demo

CM2 after ads

What is left after product cost, shipping, fees, and ads. Growth is the board on this page.

After ads

Gross$12,656
  • - COGS$2,997
  • - Shipping$605
  • - Fees$393
  • - Ads$6,099
CM2$1,675

Public demo numbers.

Every cut that matters

Day, channel, and SKU. See which paid lanes clear themselves and which are funded by the rest.

  • Worst day CM2

    10 Aug-$162
  • Worst channel CM2

    Meta-$444
  • Lowest SKU CM1

    Daily SPF 40$2,122

Public demo numbers.

Health Score, not a dump

Completeness, CAC, and returns in one number. Drivers ranked so the morning open is a decision.

Instrument

COGS completeness100/100

COGS mapped in this window

  • CM2 margin slipped vs prior period
Score64/100

Public demo numbers.

Store currency stays the ledger

Shopify sets the unit. Display converts to INR or USD. The two are never mixed in the math.

CM2

$1,675

US dollars

₹1,39,853

Indian rupees

Public demo numbers.

ROAS stops at revenue. The bank does not.

Once COGS, shipping, returns, discounts, and payment fees come out, the winning campaign on the ads dashboard is often the one draining cash.

ROAS dashboard
Revenue ÷ ads
Ignores COGS, shipping, returns, fees
Spreadsheet
Last month, maybe
Hours of exports, stale on arrival
MarginStack
CM2, today
After every variable cost, per cut
CM2 after adsHealth ScoreLTV:CACPayback daysChannel marginSKU marginMorning briefUSD + INRCM2 after adsHealth ScoreLTV:CACPayback daysChannel marginSKU marginMorning briefUSD + INR

The objections we built for.

Every number on this page comes from the same engine your store would run on.

14-day free trial

Both plans. Cancel any time. No annual lock-in, no implementation fee.

No credit card to start

The trial begins when you connect a store. You are not billed to look.

Read-only Shopify

MarginStack never changes products, orders, or prices in your store.

Incomplete costs, flagged

Missing COGS never becomes a confident wrong number. The Health Score takes a completeness penalty.

A 4x campaign can still lose money on every order. Scale paid only when the channel still clears CM2 after every variable cost.
Shopify D2C founder scaling Meta
Stop rebuilding last month by hand. The same cuts, every morning, already reconciled.
Founder still closing the month in Sheets
I will not give a margin tool write access to my store. Read the orders. Do not touch the catalogue.
Founder who has been burned by an app

Six leaks between a sale and cash.

ROAS stops at revenue over ads. Contribution margin keeps subtracting until the bank account agrees. Sample mix from the public demo, last 14 days.

Gross to CM2

Gross$12,656

What the ads dashboard celebrates

Net$11,769

After discounts and refunds

CM1$7,774

After product, shipping, fees

CM2$1,675

After ads. Cash that remains.

Where $100 of gross goes

Demo store. Not a live merchant.

Left as CM2

14%

of net revenue after every variable cost and ads.

Growth leak

Ad spend

The number you scale on is the last leak, not the first.

CM2 is CM1 minus ads for the same window. A 4x ROAS can still be red.

Demo, 14 days
$6,099
On a $100 sale
$48.2

Every number shows its work.

MarginStack publishes the formula behind each figure and flags incomplete cost data instead of guessing. If COGS is missing for a SKU, you see a warning, not a confident wrong answer.

CM1
Net revenue minus COGS, shipping, payment fees, and other variable costs
CM2
CM1 minus ad spend for the same period
Blended CAC
Ad spend divided by new customers in the period

Contribution waterfall

Demo, 14 days

CM2

14.2% of net revenue

Gross revenue$12,656
Discounts-$304
Refunds-$583
Net revenue$11,769
COGS-$2,997
Shipping-$605
Payment fees2.9% + $0.30-$393
CM1pre-ads$7,774
Ad spend-$6,099
CM2after ads$1,675

Live in under ten minutes.

No data team, no warehouse, no implementation call. Connect Shopify, add costs, and history backfills. Ads and CM2 are on Growth.

  1. Shopify connect. From Settings.
  2. SKU costs. Public demo.
  3. Morning digest. Public demo.

Growth is the product you just read. Starter is Shopify-only.

50% off your first month on Starter or Growth if you install within 30 days of App Store launch.

Most popular

Growth

$59.50$119/month

First month for waitlist. Then full price.

The board on the homepage. CM2 after ads, CAC, LTV, payback.

  • Everything in Starter
  • Meta and Google Ads sync
  • CM2 after ads, by day, channel, SKU
  • Blended and channel CAC, LTV, payback
  • Cohort analysis
  • Morning brief email

Starter

$19.50$39/month

First month for waitlist. Then full price.

Shopify only. CM1 after product costs, shipping, and fees. No ads.

  • Shopify sync
  • CM1 by day, channel, SKU
  • COGS CSV upload
  • Health Score and P&L
  • USD and INR display
  • Margin drift on Shopify economics

Installing from the Shopify App Store? Billing is handled through Shopify.

The things founders ask first.

Short answers. The sample demo has the rest.

How is this different from Shopify analytics or a ROAS dashboard?

Those show revenue and ad efficiency. Neither subtracts COGS, shipping, returns, discounts, or payment fees. MarginStack computes contribution margin after every variable cost.

What if my COGS data is incomplete?

Upload what you have. Aggregates built on incomplete data get a warning, and the Health Score takes a completeness penalty. Honest incomplete beats a confident wrong number.

Which plan matches the homepage?

Growth. That is CM2 after ads, plus CAC and payback. Starter is Shopify only: CM1 after product costs, shipping, and fees. No Meta or Google.

Do I need Meta and Google connected?

No. Shopify alone gives you CM1 on Starter. Ad accounts on Growth add CM2, blended and channel CAC, and payback, where most scaling decisions are made.

How does dual-currency display work?

Store math stays in store currency. Display converts at the daily FX rate. This page shows INR in India and USD everywhere else. Inside the product you can still switch USD, INR, or both.

What's the waitlist offer?

50% off your first month on Starter or Growth if you install within 30 days of App Store launch. You get a unique code in email when you join. After the window, full price. The 14-day trial still applies at install.

I installed from the Shopify App Store. How do I pay?

Shopify bills the subscription on your store. Manage the charge from Shopify admin, or from Settings → Billing in the app. Signing up on the website uses a card checkout instead. App Store installs never do.

See which channel is still losing money. Then scale.

Not on the App Store yet. Join the waitlist and lock 50% off your first month if you install within 30 days of launch.

Open sample demo

We’ll email your unique code. 50% off month one when we go live.

A 4x ROAS campaign can still lose money | MarginStack