TL;DR
$1-5M DTC skincare founders spend 2-3 hours every Monday morning stitching numbers across Shopify, Klaviyo, Meta, and Gorgias — and the numbers never reconcile. This post explains why your tools disagree, the 4 numbers that actually matter on Monday morning, and the 2-week n8n Cockpit that automates them. For founders not yet on Triple Whale and not ready to be.
Last Monday at 10am, she had observed everything and decided nothing
Last Monday at 7:34am, a $4M skincare founder I know finished her weekly reporting. It was 10:12am. She had not yet made a single decision.
She had numbers — 18 of them, across 6 tabs of a Google Sheet she rebuilds every quarter. Shopify said $87,420. Klaviyo claimed $29,931 of that. Meta's dashboard said her ROAS was 3.2. Triple Whale, when she eventually subscribed, said 1.8. Her ops manager said shipping complaints were up. Her Slack had 14 unread messages.
She had observed everything. She had decided nothing.
This is the Monday Morning Sheets Problem. It costs $1-5M Shopify skincare brands 2-3 hours every week and produces reports nobody acts on. It's not a tooling problem — every tool in the stack is excellent. It's an integration and decision problem. Here's what's actually broken, and how to fix it in 2 weeks.
Why don't the numbers match?
Every tool in your stack is right. By its own definition.
That's the trap. Shopify, Klaviyo, Meta, and Gorgias each answer a different question, but the dashboards all show a column called "revenue" or "ROAS." Founders assume the numbers should match. They don't. And they never will, no matter how many tools you add.
Here's what's actually happening:
Shopify has 3 different revenue numbers. Gross sales (before discounts and refunds). Net sales (after discounts, before refunds). Total sales (after refunds). If you report "yesterday we did $9,200" without specifying which one, you'll later wonder why your accountant's number doesn't match. Most founders default to Gross, which inflates everything by 5-15%.
Klaviyo claims credit for orders that would have happened anyway. Klaviyo's "Placed Order" metric attributes any order placed within a configurable window (default 5 days for email, 1 day for SMS) after someone opened or clicked your email. A repeat customer who buys every 30 days will get attributed to whatever Klaviyo email they happened to open this week. In my experience with $1-5M skincare brands, Klaviyo's attributed revenue is typically 15-30% higher than its "true incremental" revenue. Not because Klaviyo is wrong — because the question Klaviyo is answering ("did this customer interact with email before buying?") is different from the question the founder is asking ("how much extra revenue did email generate?").
Meta's ROAS has been broken since April 2021. iOS 14.5 ended deterministic attribution. Meta now uses Aggregated Event Measurement (AEM) and modeling to estimate conversions. The number is directional, not exact. Compounding the problem, Meta's default attribution window is 7-day-click-1-day-view, which captures more than Shopify will ever attribute to the same campaign. Meta says ROAS 3.2. Shopify's UTM-tagged revenue says 1.8. Both are technically correct.
Triple Whale's job is to reconcile all this. And it does, well — for brands that can afford $18,000/year and have someone who can interpret multi-touch attribution models. For everyone else, Triple Whale becomes a 6th number that doesn't match the other five.
The Monday Sheets ritual exists because founders are trying to manually reconcile tools that were never designed to agree. You can't fix that by adding tools. You fix it by picking the questions that drive decisions and ignoring the rest.
Which 4 numbers actually drive Monday decisions?
After running reporting for 30,000 properties at Agoda for nine years, then advising $1-5M DTC brands on the same problem, I'm convinced founders need exactly four numbers on Monday morning. Not eighteen.
1. Net revenue, week over week (Shopify, post-refunds, post-discounts)
The single most important number. Use Shopify's Net Sales definition — total sales minus refunds minus discounts. Compare to the prior week. If it's down >10% with no obvious cause (no sale ended, no launch happened), that's the conversation for the week. If it's up >15%, find out what worked and double down.
2. Email contribution %, week over week (Klaviyo attributed revenue ÷ Shopify net revenue)
Not Klaviyo's revenue in dollars. The ratio. Healthy DTC skincare brands run at 25-40% email contribution. If it's drifting below 20%, your flows or campaigns are weakening — or your acquisition is mostly paid (and expensive). If it's above 50%, you're under-investing in new acquisition. The ratio matters more than the absolute number because it self-normalizes as you scale.
3. True paid efficiency (Shopify net revenue ÷ Meta + Google ad spend)
Not Meta-reported ROAS. The honest version, computed against actual revenue. This is the only number that tells you whether your paid spend is making money. A 2.0 means you're at break-even before margin. A 3.0+ means you have room to scale. Below 1.5 and you're losing money no matter what Meta's dashboard says.
4. Top 3 ticket themes (Gorgias tags, last 7 days)
This is the one most founders skip. Gorgias tags are a leading indicator of churn. When "shipping delay" tickets spike 40% in a week, you'll see it in negative TrustPilot reviews 14-21 days later. By then, you've lost the customers. By looking at tag distribution every Monday, you act on Tuesday — not three weeks later.
Everything else (LTV, CAC, AOV, list size, deliverability, ad creative performance) is for monthly review, not Monday morning. Monday is for what changed and what do we do this week.
How do you actually build this in 2 weeks?
If you have someone comfortable in n8n (or willing to learn — I have a comparison post on n8n vs Zapier vs Make), this is a 2-week build.
Week 1 — the four pulls
Day 1-2: Set up n8n self-hosted on a $5/month DigitalOcean droplet, or use n8n Cloud (~$20/mo). Either works.
Day 3-4: Build the four API connections.
- Shopify: GraphQL Admin API. Pull orders and refunds for the last 7 days. Calculate net revenue.
- Klaviyo: Metrics endpoint. Pull
Placed Orderrevenue attribution for the last 7 days. - Meta Marketing API: Insights endpoint. Pull spend for the last 7 days, filtered by your ad accounts.
- Gorgias: Tickets endpoint. Pull last 7 days of tickets, group by tag, count.
Day 5: Calculate the four numbers and the WoW deltas in a single n8n Function node. Format as a Slack message. Test by triggering manually.
Week 2 — make it reliable and useful
Day 6-7: Add the reliability layer (next section). This is where most "automation in a weekend" tutorials fall apart.
Day 8-9: Add Gorgias tag drill-down. When "shipping delay" spikes, the Slack message should auto-pull the worst-affected orders and link to them in Shopify.
Day 10: Schedule the cron trigger (Monday 6am local time). Add a Google Sheet output that appends one row per week — your history log for trend analysis later.
Total cost to run: ~$20/month n8n self-hosted + ~$0 for Slack + ~$0 for the Google Sheet. Compare to the $1,500/month you'd pay for the same four numbers inside Triple Whale.
This is genuinely something you or someone on your team can build. The reason you'd hire me (or someone like me) is the reliability layer — not the integrations.
What happens when an API breaks?
This is the question almost every automation tutorial skips. And it's the one that separates a 2-week prototype from a tool you trust for a year.
APIs go down. Tokens expire. Vendors change endpoints. The version of your Cockpit that ships on Day 14 will, without active maintenance, silently break by Day 60. Meta tokens expire every 60 days. Klaviyo private keys can be revoked. Shopify webhooks can fail without retries. Gorgias rate-limits aggressively.
Every Cockpit I build has four reliability layers:
Detection. Every API call wraps in error handling. Empty responses are checked (Klaviyo returning $0 because the token expired looks identical to a quiet week — they're not the same). Stale data is flagged (if Shopify hasn't returned a new order in 24 hours during business days, something's wrong).
Recovery. API calls retry with exponential backoff — 1s, then 4s, then 15s, max three attempts. Tokens auto-refresh before they expire, not after they fail. Failures are partial, not total — if Meta is down, the Cockpit still delivers Shopify + Klaviyo + Gorgias with a flag: "Meta data unavailable, will retry next run."
Notification. Failures don't disappear. A separate error workflow posts to a Slack #ops channel with the node name, the error message, and a direct link to the n8n execution log. The founder doesn't need to dig — the alert tells the engineer exactly where to look.
Visibility. Every Monday's Cockpit message ends with a freshness footer:
Sources: ✅ Shopify (6:02am) · ✅ Klaviyo (6:03am) · ⚠️ Meta (last refresh 48h ago)
The founder always knows what's reliable in this report. No silent degradation. No false confidence.
A Cockpit that works in week 1 and silently breaks in week 6 destroys more trust than no Cockpit at all. I build for the year, not the demo.
Who should NOT build this?
I've spent this whole post explaining why a $1-5M DTC skincare brand should automate their Monday reporting. Honesty demands the inverse.
This is for you if:
- You're a DTC brand on Shopify, doing $1-5M in annual revenue
- Your stack includes Klaviyo (email/SMS), Meta or Google (paid), and a helpdesk (Gorgias, Re:amaze, Zendesk)
- The founder or a co-founder still pulls the weekly numbers personally
- You don't yet have a dedicated analytics person or data team
- You're tired of spending Monday mornings stitching tools instead of making decisions
This is NOT for you if:
- You're under $1M annual — you don't have enough data noise yet, and the time you'd save isn't worth the build cost
- You're already on Triple Whale or Polar Analytics, and you trust the numbers — building this would just duplicate
- You're not on Shopify — the architecture is different enough that this exact build doesn't apply
- The founder doesn't pull weekly numbers personally — if Monday morning reporting isn't already on someone's plate, there's no pain to solve
- You have a $50k+/month paid ad budget and need true multi-touch attribution — graduate to Triple Whale, you've outgrown this setup
The Cockpit is the dashboard you build before you're ready for Triple Whale. When you outgrow it, you graduate up. That's a good problem to have, and I'll be the first to recommend it when you get there.
FAQ
Do I need Triple Whale?
If you're spending $50k+/month on Meta and Google ads, run multi-channel attribution, and have someone who can read MTA models — yes, eventually. For $1-5M brands with simpler stacks, you're paying for capacity you don't use. The Cockpit gives you the 4 numbers that drive Monday decisions; you graduate to Triple Whale when you've outgrown them.
Can I build this myself?
Yes, if you (or someone on your team) is comfortable in n8n or Zapier and willing to read API docs. The 4 API connections (Shopify, Klaviyo, Meta, Gorgias) are well-documented. The hard part isn't integration — it's deciding which 4 numbers matter and resisting the urge to add a 5th.
Why n8n and not Zapier?
For ecommerce reporting, you need conditional logic, error handling, and the ability to run the same flow against multiple stores. n8n handles all three without per-task pricing. Zapier works but you'll hit task limits fast. Full comparison: n8n vs Zapier vs Make.
What if my stack is different — no Gorgias, different SMS tool?
The pattern is the same: 4 sources, 4 numbers, one weekly Slack message. Swap Gorgias for Re:amaze or Zendesk, Klaviyo for Sendlane, Meta for TikTok Ads. The 4-number framework holds. The Cockpit is the architecture, not a specific integration list.
What happens when an API breaks?
That's the most important question, and most automation tutorials skip it. Every Cockpit I build has 4 reliability layers: detection (knows when a source fails), recovery (retries, partial-success delivery), notification (Slack alerts to ops), and visibility (founder sees freshness per source in every report). A Cockpit that works in week 1 and silently breaks in week 6 destroys more trust than no Cockpit at all.
How long until I see ROI?
The math: if the Cockpit replaces 2.5 hours/week of founder time, that's 130 hours/year. At a founder's effective hourly value of $100-300, ROI is $13,000-39,000/year on a one-time build. Most setups pay back in month 1 — but the bigger value is decisions happening Monday morning instead of Wednesday afternoon.
Who should NOT build this?
- Brands under $1M annual (not enough data noise yet)
- Brands already on Triple Whale or Polar (you'd just duplicate)
- Brands with no Shopify (different architecture entirely)
- Brands where the founder doesn't pull weekly numbers (no pain to solve)
- Brands spending $50k+/month on paid (you need real MTA, graduate to Triple Whale)
About the author
Geoffroy Apperce is the founder of SaphesAI, where he builds reporting automation and lead routing systems for small DTC and B2B teams. Before founding SaphesAI, he spent 9 years at Agoda (Booking Holdings), most recently as Head of Strategy for Key Accounts, where he ran reporting infrastructure for 27 hotel chains and 30,000+ properties. He is n8n Certified (Level 1 & 2), a McCombs School of Business AI for Leaders alumnus (UT Austin, 2025), and operates his own AI SaaS (IG Lead Engine). Every SaphesAI project ships with a Loom walkthrough so clients can maintain the system without him.
📧 geffapp@saphesai.com · 🌐 saphes.ai · 💼 LinkedIn
Want a free audit?
I'm running 5 free 30-minute audits this month for $1-5M DTC brands. I'll record a Loom showing your specific data flow, where the 4 numbers live, and what a Cockpit would look like for your stack. No pitch, no upsell. If you want one, DM me on LinkedIn or reply to this post.

