How to track gross margin by channel and sku as DTC Brand Founders

Finance & FP&AFor DTC Brand Founders3 apps12 steps~24 min to set up

You know your Shopify revenue number. You know roughly what you spent on Meta and Google Ads. But you have no idea which SKU actually made money last month after you back out COGS, ad spend, fulfillment, and returns. Your gross margin math lives across a Shopify export, a Meta Ads Manager CSV, a Klaviyo attribution report, and a Google Sheet that your 3PL toucheded last and nobody fully trusts. Every week you're manually reconciling these to figure out whether your hero SKU is actually profitable or just high-revenue. Channel-level margin is even worse — you have no idea if your DTC site outperforms Amazon after fees, or if that influencer campaign SKU is underwater. You need this answered before your next inventory buy.

Finance & FP&AFor DTC Brand Founders3 apps12 steps~24 min to set up
Outcome

What you'll set up

A live gross margin dashboard that breaks down contribution by SKU and channel — Shopify DTC, Amazon, and any wholesale — pulling from your actual bank transactions and order data, updated daily without a spreadsheet rebuild
Automated flagging when a SKU's margin drops below your floor (say, 40%) because ad spend spiked, returns climbed, or COGS crept up on reorder
A scenario model showing what happens to blended gross margin if you shift spend from Meta to a lower-CAC channel, raise prices 8% on one SKU, or absorb a shipping cost increase
The Starch recipe

Apps, data, and prompts

The combination of Starch apps, the data sources they pull from, and the prompts you use to drive them.

Data sources & config

Starch connects directly to QuickBooks so COGS and vendor bills sync on a schedule. Starch connects directly to Plaid so bank transactions — ad platform charges, 3PL invoices, payment processor deposits — sync daily. Shopify, Meta Ads Manager, and Google Ads are connected from Starch's integration catalog; the agent queries them live when the dashboard or automation runs. Slack is connected from Starch's integration catalog for alert delivery.

Prompts to copy
Build me a gross margin dashboard that shows contribution margin by SKU and by sales channel. Pull revenue from Shopify orders and ad spend from Meta Ads and Google Ads. Pull COGS from my QuickBooks bills. Show me which SKUs are above and below 40% gross margin after deducting ad spend allocated to each product.
Create a scenario: what happens to my gross margin if my top SKU's Meta CPM increases 30% and my blended ROAS drops from 2.8x to 1.9x? Keep everything else the same and show me the margin impact in dollars.
Set up an alert: if any SKU's trailing 30-day gross margin falls below 35%, notify me in Slack with the SKU name, the margin drop, and the most likely cause based on recent spend or returns data.
Run these in Starch → or paste them into your favorite agent
Walkthrough

Step-by-step

1 Connect Plaid in Starch — your business checking and any card accounts used for ad spend, 3PL payments, and inventory purchases will sync on a schedule so every transaction is available without a manual export.
2 Connect QuickBooks so Starch syncs your bills, vendor payments, and COGS entries on a schedule. This becomes your unit-cost source — each bill tied to an inventory purchase maps to a SKU.
3 From Starch's integration catalog, connect Shopify. The agent queries your order data live — line items, discounts, returns, channel tags — when the dashboard runs.
4 From Starch's integration catalog, connect Meta Ads Manager and Google Ads so Starch can pull spend by campaign and ad set, matched to the SKUs or collections those campaigns promoted.
5 Tell Starch: 'Build a gross margin table by SKU. Revenue comes from Shopify net sales (after returns and discounts). COGS comes from QuickBooks bills tagged to each SKU. Channel ad spend is allocated to SKUs based on the products in the promoted ad sets.' Starch builds the table.
6 Add a channel dimension: 'Break the same margin view out by sales channel — Shopify DTC, Amazon (via browser automation against Seller Central), and any wholesale orders tagged in Shopify. Show net revenue, COGS, fulfillment cost from Plaid transactions tagged to my 3PL, and contribution margin for each channel.'
7 Set your margin floor: 'Flag any SKU where gross margin after ad allocation drops below 40% in the last 30 days. Show me the SKU, current margin, and what changed — spend increase, return rate spike, or COGS variance.'
8 Fork the Scenario Analysis starter app and connect your Plaid and Shopify data as the baseline. Run the scenario: 'What is my blended gross margin if I pause Meta spend on SKU X entirely for 60 days and redirect that budget to email via Klaviyo, assuming Klaviyo-attributed revenue holds at current levels?'
9 Connect Slack from Starch's integration catalog and set up an automation: 'Every Monday at 8am, post a margin summary to #founders-channel showing the top 3 SKUs by contribution dollars, the bottom 3 by margin percentage, and any SKU that crossed the 40% floor in either direction last week.'
10 Use the Runway Analysis starter app to tie gross margin back to cash. Connect Plaid and Stripe so you can see: 'At current blended gross margin, what is my actual cash runway after operating expenses?' This closes the loop between SKU-level margin and your burn rate.
11 Build an inventory reorder trigger: 'When a SKU's 30-day sell-through rate implies fewer than 45 days of inventory remaining, and that SKU's gross margin is above 40%, draft a reorder recommendation in Notion with the SKU name, units needed, and estimated COGS based on the last QuickBooks purchase order.' Starch connects directly to Notion and queries it live.
12 Schedule a monthly reconciliation run: 'On the first of each month, pull last month's actual gross margin by SKU and channel, compare it to the scenario I built in step 8, and write a variance explanation to a Notion page so I have a record before my board call.'

See this running on Starch

Connect your tools, describe what you want, and the agent builds it. Closed beta is free.

Try it on Starch →
Worked example

Q1 2026 margin close — March actuals for a 3-SKU DTC skincare brand

Sample numbers from a real run
SKU A (Hero Serum) — Shopify DTC net revenue148,000
SKU A — COGS (QuickBooks bills)44,400
SKU A — Meta Ads allocated spend31,200
SKU A — 3PL fulfillment (Plaid, ShipBob invoices)11,100
SKU A — Contribution margin61,300
SKU B (Moisturizer) — Shopify DTC + Amazon net revenue62,000
SKU B — COGS21,700
SKU B — Ad spend + Amazon fees18,600
SKU B — Fulfillment6,200
SKU B — Contribution margin15,500
SKU C (Eye Cream) — Shopify DTC net revenue29,000
SKU C — COGS11,600
SKU C — Meta Ads allocated spend14,500
SKU C — Fulfillment3,480
SKU C — Contribution margin-580

In March, Starch pulled Shopify net sales by SKU (after returns and discount codes), matched QuickBooks COGS bills to each product line, and allocated Meta and Google ad spend by SKU based on which products appeared in each campaign's product set. SKU A (Hero Serum) is running at 41.4% contribution margin — healthy, though Meta CPM increased 18% MoM and the scenario model flags that a further 15% increase tips it below the 40% floor. SKU B looks fine at 25% on paper until you add Amazon referral fees pulled via browser automation from Seller Central; the actual channel-level margin on Amazon is 18.2% vs 31.5% on Shopify DTC — a number nobody had seen before because the Seller Central fees never made it into the Google Sheet. SKU C is underwater by $580 after ad allocation. The Monday Slack alert had already flagged it the previous week when its trailing 30-day margin crossed zero. The reorder recommendation Starch drafted in Notion for SKU A was automatically suppressed for SKU C until margin recovers — no manual check needed.

Measurement

How you'll know it's working

Contribution margin by SKU (revenue minus COGS, ad spend, and fulfillment), tracked monthly
Blended gross margin by sales channel (DTC Shopify vs Amazon vs wholesale) after channel-specific fees
Ad spend as a percentage of net revenue per SKU, with 30-day trailing view
Return rate impact on effective gross margin — how much do refunds compress margin on your top SKU
Days of inventory remaining for positive-margin SKUs, tied to reorder trigger threshold
Comparison

What this replaces

The other ways teams handle this today, and how the Starch version compares.

Shopify Analytics + manual Meta Ads CSV export + Google Sheets
This is what most DTC founders are doing today — it gives you revenue by SKU but forces you to manually join ad spend, COGS, and fulfillment data every month; one bad VLOOKUP and your margin numbers are wrong for the board call.
Triple Whale or Northbeam
Strong at paid media attribution and blended ROAS, but they don't pull COGS from QuickBooks or fulfillment cost from your bank feed, so you get marketing efficiency metrics, not true gross margin by SKU.
Cin7 or Inventory Planner
Good at inventory forecasting and COGS tracking at the SKU level, but they don't connect ad spend data or bank transactions, so margin after marketing is still a manual calculation.
Glew.io or Daasity
Purpose-built DTC analytics with channel and SKU views, but they're read-only dashboards — you can't build automations, run scenarios, or trigger Slack alerts and Notion drafts from the same platform.
On Starch RECOMMENDED

One platform — transaction insights, scenario planning, runway analysis all running on connected data. Setup in plain English; numbers stay current via scheduled syncs and live agent queries.

Try it on Starch →
FAQ

Frequently asked questions

Does Starch actually connect to Shopify, Meta Ads, and Google Ads, or do I have to export CSVs?
No CSV exports. Shopify, Meta Ads Manager, and Google Ads are all available from Starch's integration catalog — you connect them once and the agent queries them live when your dashboard or automation runs. No scheduled export, no manual upload.
My COGS are in QuickBooks but the QuickBooks P&L view isn't working — what do I get?
Starch syncs QuickBooks entity-level data on a schedule — that means bills, invoices, vendors, payments, and journal entries. The QuickBooks built-in P&L and Transaction List report views are temporarily unavailable due to an upstream connector issue, but your individual bills and purchase orders sync normally. Your COGS-by-SKU calculation will be built from bill data, not the QuickBooks report view.
What about Amazon? I sell on Seller Central and need to back out fees.
Amazon Seller Central doesn't have a traditional API connector in the catalog, so Starch automates it through your browser — no Amazon API needed. It can pull your order data, fee breakdowns, and settlement reports from Seller Central directly. The Amazon Seller Dashboard is a live pre-built app in the App Store you can start from.
Can Starch handle ad spend attribution by SKU, or does it just see total spend?
Starch queries Meta Ads and Google Ads at the campaign and ad set level, so it can see which products or product collections each campaign promoted. You'd tell Starch how to allocate spend — for example, 'allocate this campaign's spend to SKU A because it only ran that product' — and the app follows that logic. It's not an MTA model; it's rules-based allocation you control.
Is Starch SOC 2 certified? I'm connecting bank accounts and financial data.
Starch is not SOC 2 Type II certified today. That's worth knowing before you connect Plaid bank feeds or QuickBooks. It's on the roadmap. If SOC 2 is a hard requirement for your business, that's an honest reason to wait.
My gross margin data is sensitive — can I control who on my team sees the SKU-level breakdown?
You control what gets published in Starch and where. Alerts can go to a private Slack DM instead of a channel. Dashboard access is scoped to your workspace. Starch doesn't currently have row-level access controls within a shared workspace, so if your team all shares one Starch workspace, they'd all see the same data surfaces you build.
How long does it take to get the first margin view up?
Connecting Plaid, QuickBooks, Shopify, and your ad platforms takes 20–30 minutes if your credentials are ready. The first time Starch syncs QuickBooks bills and Plaid transactions, it backfills historical data — so your first dashboard can include several months of COGS and spend history, not just data from today forward. Your first margin table can be live the same day.

Ready to run track gross margin by channel and sku on Starch?

Request closed-beta access. Everything is free during beta.

You're on the list! We'll be in touch soon.