Where the money goes · June MTD waterfall
Contribution margin cannot move based on an attribution window. It is what it is. Full cost stack per order: product, shipping, transaction, fulfillment, returns, fees.
The read
Forecast setup · the real configured model
| Starting month | January 2026 |
| Target annual net sales | $3,700,000 |
| Cost of goods % | 45.23% |
| Operating expenses | $555,000 |
| Target net profit | $555,000 |
| New customers % | 78.92% |
Marketing budget is never asked for. It falls out of the other five numbers.
- Cost of goods 45.23% · $1.67M
- Marketing 24.77% · $916,490
- Operating expenses 15% · $555,000
- Net profit 15% · $555,000
"You can afford to spend $916,490 on marketing, as long as you maintain an average MER of 4.04."
June pacing · day 10 of 30
| Plan (day 10) | Actual | Status | |
|---|---|---|---|
| Net sales | $82.7K | $68.4K | 17% behind |
| Ad spend | $20.5K | $18.2K | under budget |
| Contribution | $24.8K | $19.3K | behind |
| MER | 4.04x | 3.75x | below |
June target $248K from the seasonal curve (6.7% of $3.7M). Run-rate divides by day: behind sales, under budget, more efficient, missed profit.
Modeled on 2024 (year before last), 2025 was distorted by the pre-BFCM membership change. ~40% of revenue lands Sept–Jan. Every month is editable for out-of-stock or launch shifts.
What-if modeler
| Before | After |
|---|
Each scenario re-computes contribution, break-even, runway, and the 2026 profit goal in one view.
SKU profitability · June MTD
| Product | Units | Net Sales | Landed COGS | CM / unit | CM % | Verdict |
|---|---|---|---|---|---|---|
| "Lined Up" · Endless Frame M | 38 | $15,086 | $5,890 | $242 | 61% | Profit engine |
| "Junk In The Trunk" · Frame M | 29 | $11,513 | $4,610 | $238 | 60% | Profit engine |
| "We Are Infinite" · Frame L | 14 | $9,730 | $4,170 | $397 | 57% | Profit engine |
| Endless Frame only · Hickory M | 22 | $6,138 | $3,070 | $139 | 50% | Gateway SKU |
| Member prints · unframed S (50% off) | 64 | $4,800 | $3,260 | $24 | 32% | Blades · watch shipping |
| "Come Away" · unframed S promo | 18 | $1,350 | $1,490 | -$8 | -10% | Loss leader |
| Long tail · 251 SKUs, 0–1 sales | 31 | $3,905 | $2,610 | $42 | 33% | Archive review |
Landed COGS = product + shipping (metafield feed) + transaction + fulfillment + returns + fees. Loss leaders only OK when they attach a frame later, tracked in cohort column (next build).
| Date | Order | Customer | Type | Status | Paid | COGS | Shipping | Gross Profit | Verdict |
|---|
- Per-order cost stack: product + actual shipping (metafield feed) + transaction + fulfillment + returns reserve
- #8837 pattern: small unframed print + member 50% + zone-3 shipping = negative. 41 orders like this YTD
- Fix in flight: free-shipping threshold + "add a print" bundle nudge on small orders
- Why no ROAS as the headline: 10 different ROAS numbers exist in any ad account depending on the lookback window
- The ad buyer is the largest investor in the business (25%+ of revenue). They get held accountable to contribution margin
- Attribution stays in Triple Whale for Val + Abby. This view answers one question: did the money make money?
| Campaign / Ad set / Creative | Spend | Attributed Sales | CM after spend | MER | Verdict |
|---|---|---|---|---|---|
| Meta · Prospect · "Swap in 10 sec" UGC | $5,210 | $19,430 | +$3,910 | 26.8% | Scale |
| Meta · Prospect · "No AI Art" statement | $3,940 | $15,860 | +$3,480 | 24.8% | Scale |
| Meta · Retarget · Membership 50% off | $2,180 | $8,090 | +$1,240 | 26.9% | Hold |
| Google · PMax · Catalog all | $4,470 | $13,750 | +$610 | 32.5% | Trim long-tail SKUs |
| Meta · Prospect · "Sustainable frame" static | $2,440 | $5,420 | -$390 | 45.0% | Kill or rework claim |
Sourced from Meta + Google APIs, costed with the same landed-COGS stack as SKUs. The "sustainable" static also carries the unsubstantiated-claim risk flagged in the SEO audit.
- The Design-Minded Homeowner · 60% of orders, highest AOV: $987 avg order · 28% buy 2+ pieces · top channel Direct · CA/FL/NY/TX/CO · NYC (66), LA (36), Dallas (32) · prefers Large/Statement/Gallery, black frame · returns via brand search
- The Interior Designer / Trade Buyer · 12% of customers, $66K B2B: $1,400+ typical spend · 29 draft orders · 20%+ repeat · orders Gallery/Statement/Collector · codes "Trade Partner Tavistock," "Founder Approved 50%" · one client project = 5–8 standard orders
- The Occasion Gift Buyer · seasonal spike driver: $315–$550 typical · Small-Med sizes · peaks Nov/Dec, Father's Day, Mother's Day, Valentine's · first visit Meta/Instagram, buys on impulse · codes presidents-day, be-mine-25, helm20
- The Repeat Collector · highest-LTV individual: returns month 6–12 · $950+ second-order AOV · 25–35% LTV uplift · upgrades size on second order · best cohorts 22–23% repeat (Feb–Mar 2024) · activated by email
- Americana / Western (Cowboy Bar, Junk In The Trunk, Cactus Pink): most distinctive voice, strongest with gift buyers and men
- Coastal / outdoor lifestyle (Bikini Hangs, Surf, Golf, California): broadest appeal, works across all four personas
- European travel (Como, Amalfi, Italy): skews homeowners, Gallery and Collector formats
- The Seventh Green is the sleeper hit. Golf is a very underserved niche in premium art
- 740-SKU catalog is creating decision fatigue. 23 products carry 10+ sales; top 134 products = 80% of revenue
- Recommend: archive the 251 long-tail SKUs with 0–1 sales, route their pages to collections
- Collection pages have no real H1 and no meta descriptions, weak entries from search
- Extend analysis window to include Nov–Dec before final pruning, seasonality matters
| Component | Source | June avg / order |
|---|---|---|
| Product cost | Shopify cost-per-item | $55.80 |
| Shipping (actual) | Metafield feed · Gelato API | $41.60 |
| Transaction fees | Shopify Payments | $8.70 |
| Fulfillment | Rate card | $6.20 |
| Returns reserve | Model · 20% adjustable | $9.10 |
Shipping is the differentiator: actual per-order cost from the metafield poll, not a flat estimate. This was Brent's #1 requirement.
| Line | Source | $/mo |
|---|---|---|
| Channel tools + apps | QuickBooks feed | $4,180 |
| Agency (Webtopia) | QuickBooks feed | $7,500 |
| Studio + storage | QuickBooks feed | $3,900 |
| Salaries (incl. Ralph) | Manual · Brent to confirm | $20,600 |
| Contractors + design | QuickBooks feed | $7,980 |
| Insurance, legal, misc | QuickBooks feed | $2,140 |
Shipping % of net sales alert: fires when the 7-day average moves >1.5 points. It fired May 28 (Gelato zone-3 rate change).
- Phase 1 (done): layout, modules, metric definitions, mock data engine, interactions
- Phase 2 (ready to wire): click Connect on each source above. Adapters are stubbed in
HelmEngine.adapters, each exposes connect() + fetch() - Phase 3: forecast engine on live data + alerts + Claude MCP, then cancel StoreHero ($6K/yr saved)