E-commerce — profit, ads, inventory for a DTC brand
15 minutes. Three CSVs. You play the ops lead at a 7-person oat-milk brand and answer the four questions that actually matter.
The scenario
You’re the ops lead at Harvest Co., a 7-person DTC brand selling oat milk, cold brew, matcha, and a handful of other consumables. You sell on Shopify (most of your revenue) and Amazon (growing). You run ads on Google, Meta, and TikTok.
Nobody on the team is an analyst. You used to do the numbers in a spreadsheet, but the joins — orders × refunds × ad spend × inventory — got painful around week 3. Your cofounder keeps asking “are we profitable this week?” and you keep saying “let me get back to you.”
Today you’re going to answer four questions with Tablize:
- Which SKUs are actually profitable after all costs?
- Is our ad spend working once you join it to real orders?
- Which SKUs are about to stock out — and which are overstocked?
- Can the team self-serve a weekly view of this without asking you?
By the end of 15 minutes you’ll have a Report, a Dashboard, and a Watch — all running on their own.
Download the sample data
Three CSVs. Save them anywhere — you’ll drag them into Tablize in a moment.
Open Tablize (console.tablize.com — sign up for a free workspace if you haven’t). You’ll land in an empty Chat.
Drag all three CSVs onto the chat window. The Agent confirms each one as it imports:
orders.csv→data.orders(7,131 rows)ad-spend.csv→data.ad_spend(540 rows)inventory.csv→data.inventory(12 rows)
You’re ready.
Which SKUs are actually profitable?
This is the question you can’t answer in a spreadsheet because the join (orders × refunds × products) is awkward. The Agent writes the SQL in one shot.
What you’ll see (numbers approximate — generated data has some randomness even with a fixed seed):
| SKU | Product | Units | Revenue | Net profit | Margin |
|---|---|---|---|---|---|
| SKU-1048 | Oat Milk 500ml | 1,052 | $3,620 | $1,280 | 35.4% |
| SKU-1047 | Oat Milk 1L | 759 | $4,420 | $1,310 | 29.6% |
| SKU-4006 | Almond Butter 500g | 210 | $3,360 | $980 | 29.2% |
| SKU-0912 | Cold Brew 12oz | 388 | $1,720 | $410 | 23.8% |
| SKU-3102 | Bamboo Whisk | 88 | $1,230 | $180 | 14.6% |
| SKU-3101 | Ceramic Matcha Bowl | 54 | $1,290 | $110 | 8.5% |
Keep it: click + Save as Report. Name it “SKU profit — weekly” and set a weekly schedule (Monday 09:00 is fine). You’ve got your first recurring asset.
Try a follow-up (optional):
The Agent pulls the refund-rate time series, spots that the last 7 days are running ~3x the 90-day baseline, and flags that it’s concentrated in SKU-0912 + SKU-1047 + SKU-2238. Those three SKUs shipped together — likely a bad fulfillment batch.
(This is a real signal in the sample data — the generator injected a simulated bad batch on the last 7 days.)
Is ad spend actually working?
Every ad platform claims great ROAS. When you add them up they total more than your revenue. This question forces the join against your real orders.
The Agent notices that ad-spend.csv records attributed_orders at the platform level, and that real revenue lives in orders.csv. It writes two queries — one to aggregate spend per (platform, campaign) and another to pull actual revenue — and produces:
Keep it: click + Watch weekly ROAS. The Agent creates a Watch that runs every Monday at 09:00 and pings you on email if any campaign’s ROAS drops below 2.0. No more “why is our ad spend up?” surprise meetings.
Which SKUs are about to stock out?
| SKU | Product | On hand | Daily sales | Days cover | Status |
|---|---|---|---|---|---|
| SKU-1048 | Oat Milk 500ml | 105 | 35.1 | 3.0 | critical |
| SKU-3102 | Bamboo Whisk | 14 | 2.8 | 5.0 | critical |
| SKU-4005 | Hemp Protein 1kg | 18 | 2.1 | 8.6 | warning |
| SKU-0913 | Cold Brew 32oz | 1,240 | 8.4 | 147.6 | overstocked |
Keep it: click + Watch inventory. The Agent asks how often to check — pick “every 6 hours” since inventory moves fast. It’ll ping you the moment any SKU drops below 7 days of cover.
Can the team self-serve this?
The three questions above are Reports / Watches. They email the team. But for a live “how are we doing right now” view, you want a Dashboard the team can open on their own.
The Agent generates the Dashboard in about 10 seconds. You’ll see it slide into the right panel:
Copy the public link. Paste it in your team’s Notion, Slack, or email signature. It’ll update every 5 minutes without you lifting a finger.
What you built in 15 minutes
- 1 Report — SKU profit, running weekly.
- 2 Watches — ROAS alert, inventory stockout alert.
- 1 Dashboard — live view, publicly shareable.
The Dashboard replaces your cofounder’s “are we profitable?” ping. The Watches replace your “did anything break overnight?” check. The Report replaces your Monday-morning pivot-table build.
All four keep running on their own. Next week you’ll open Tablize, and your Monday is done before your first coffee.
Next steps in this industry
- Connect your real Shopify — see Integrations → Shopify. Same questions work with live data.
- Add Stripe — for cash flow, refund reason breakdown, disputes. One more OAuth connection, no code.
- Hook up Amazon SP — multi-channel view for sellers who are actually split across platforms.
- Read the E-commerce industry page — deeper scenarios: cross-border currency handling, margin-at-risk alerts, subscriber LTV modeling.
Nearby tutorials
- Advertising — if media buying is your main lens, not merchandising.
- SaaS — if you’re running a B2B product with subscriptions.
- Logistics — if you’re the one actually shipping the boxes.