Revenue streams
Net revenue split by stream, source platform, conversion type and channel, with MER and ROAS on the same totals.
Luxury home textiles and fragrance · FR, DE, NL, UK, US · Stack: Shopify Plus, Amazon, bol, Klaviyo, Impact, Meta, Google Ads, Pinterest, Amazon Ads, Recharge, Okendo, GA4
RV1Net revenue
Up18.2%€444,878
All streams
RV2MER
Up0.5%4.28x
Net revenue / total marketing spend
RV3Blended ROAS
Up0.3%4.51x
Net revenue / ad spend
RV4nc-ROAS / aMER
Down2.0%1.87x
44% of revenue is new customers
RV5Marketing spend
Up17.6%€103,854
Ads €98,698 · Affiliate €3,901
RV6Contribution margin
Up17.8%€91,253
20.5% of net revenue
RV7Revenue per purchase
Up1.7%€124
Lead form €400 per lead
RV8Orders
Up14.3%3,266
AOV €136
Streams
Where the revenue comes from, what it costs and what is left.
RV9Revenue by stream over time
Daily buckets
Source: normalised orders layer (net = gross - discounts - cancellations - refunds) · channel: Shopify customerJourneySummary.lastVisit.utmParameters (can be empty, GA4 as fallback)
Margin = contribution margin. Showing: All streams.
RV10Revenue streams
Click a header to sort, click a stream to filter the page
Source: orders.net_revenue, orders.count, marketplace_fees, affiliate_commission, payment_fees, ad_spend_daily · MER = net / spend, ROAS = net / ad spend
| €203,985 | Up13.9% | 2.92x | €26,097 (13%) | |
| €97,162 | Up15.8% | 4.86x | €16,827 (17%) | |
| €69,602 | Up40.2% | 11.92x | €20,638 (30%) | |
| €41,426 | Up16.9% | 9.65x | €16,223 (39%) | |
| €32,703 | Up16.0% | 8.38x | €11,468 (35%) | |
| Total | €444,878 | 18.2% | 4.28x | €91,253 (21%) |
Affiliate commission is part of marketing spend, so it is not deducted a second time in contribution margin. ROAS uses paid-media ad spend only; streams without paid media show a dash.
Sources and conversion types
Which system the number comes from, and what kind of conversion produced it.
RV11Revenue by source platform
Net revenue per connected system, normalised to ex-tax, after refunds
Source fields: Shopify Plus currentTotalPriceSet · Recharge total_price · Amazon orderedProductSales · bol unitPrice x quantity
| Shopify Plus | €306,290 | 68.8% |
| Amazon | €60,240 | 13.5% |
| Recharge | €41,426 | 9.3% |
| bol | €36,922 | 8.3% |
| Total | €444,878 | 100% |
Reconciles to total net revenue. Hover a platform for the API endpoint and normalisation rule. Raw platform values differ (tax inclusive, ordered vs shipped, GMV with cancellations), so every source is normalised to net, ex-tax.
RV12Conversion type split
Purchase vs Lead form: counts, value, CPA and conversion rate
Source: GA4 keyEvents (purchase, generate_lead) · HubSpot deals (amount, dealstage) · shop order count
| Type | Conversions | Conv. rate | Net revenue | CPA | vs previous |
|---|---|---|---|---|---|
| Purchase | 3,236 | 4.01% | €402,038 | €30.98 | Up14.4%Up2.1% |
| Lead formTrade account enquiries (HubSpot) | 107 | 4.49% | €42,840expected, from won leads | €33.60 | Down2.7%Up46.0% |
| All conversion types | 3,343 | €444,878 |
Net revenue per type adds up to total net revenue. Lead form value = pipeline (leads x average deal value); expected revenue = pipeline x lead-to-won rate (won / leads; the hotel's Mews/SevenRooms data uses won / (won + lost)) (28.0% this period). CPA = spend allocated to the type / conversions; for lead forms this is cost per lead. Conversion rate = conversions / sessions (purchases and bookings) or form views (leads).
RV13Conversion trend per type
One chart per type, each on its own scale
PurchasePurchases
Lead formLeads
Channels and efficiency
Revenue and return per channel, and how much the platforms over-claim.
RV14Stream x channel matrix
All streams: darker means higher. Organic and direct have no spend
Source: channel credit from Shopify customerJourneySummary.lastVisit.utmParameters (can be empty, GA4 as fallback) · marketplace ads reports · ad_spend_daily
| Stream | Meta | Amazon Ads | Affiliate | Organic | Direct | Total | |||
|---|---|---|---|---|---|---|---|---|---|
| DTC webshop | €42,788 | €47,459 | €10,861 | - | €35,321 | - | €34,707 | €32,849 | €203,985 |
| Marketplaces | - | - | - | €36,492 | - | - | €60,670 | - | €97,162 |
| Affiliate | - | - | - | - | - | €30,077 | €984 | €1,642 | €32,703 |
| Wholesale / B2B | - | €13,876 | - | - | €12,549 | - | €15,469 | €27,708 | €69,602 |
| Subscriptions | €3,337 | €1,660 | - | - | €16,639 | - | €4,141 | €15,649 | €41,426 |
| Total | €46,125 | €62,995 | €10,861 | €36,492 | €64,509 | €30,077 | €115,971 | €77,848 | €444,878 |
Revenue per cell is net revenue credited to the channel by the attribution source above (a modelled allocation, not a platform claim); every row adds up to the stream total. ROAS = cell revenue / cell spend; the total column is MER because it includes organic and direct revenue.
RV15MER trend
Net revenue / total marketing spend
RV16Blended ROAS trend
Net revenue / paid-media ad spend
RV17Platform-reported ROAS vs allocated ROAS
Platforms each claim the same order, so their numbers do not add up
Source: Meta action_values[omni_purchase], Google Ads metrics.conversions_value, TikTok total_purchase_value [?], Amazon Ads sales14d · allocated = de-duplicated attribution
| Channel | Spend | Platform-reported revenue | Allocated revenue | Claimed / allocated |
|---|---|---|---|---|
| Meta | €37,966 | €70,848 | €46,125 | 1.54x |
| €33,588 | €84,665 | €62,995 | 1.34x | |
| €7,139 | €15,640 | €10,861 | 1.44x | |
| Amazon Ads | €20,005 | €42,039 | €36,492 | 1.15x |
| €1,255 | €92,893 | €64,509 | 1.44x | |
| Affiliate | €3,901 | €33,205 | €30,077 | 1.10x |
| All platforms | €103,854 | €339,290 | €251,059 | 1.35x |
Sum of platform-reported revenue
€339,290
Actual net revenue (All streams)
€444,878
Overlap ratio 0.76x = sum of platform revenue / actual net revenue.
Quality of revenue
From gross to net, new versus returning, and what sells.
RV18Gross to net revenue
All streams: what is lost between sale and net
Source: Shopify totalDiscountsSet, totalRefundedSet · Magento base_discount_amount, base_total_refunded · Woo discount_total, refunds[].total
RV19Gross to net per stream
Percentages are of gross sales
| Stream | Gross | Discounts | Cancellations | Refunds | Net revenue |
|---|---|---|---|---|---|
| DTC webshop | €242,422 | €21,538 8.9% | €3,745 1.5% | €13,154 5.4% | €203,985 |
| Marketplaces | €115,255 | €5,804 5.0% | €2,329 2.0% | €9,960 8.6% | €97,162 |
| Affiliate | €39,899 | €4,331 10.9% | €486 1.2% | €2,379 6.0% | €32,703 |
| Wholesale / B2B | €75,714 | €4,469 5.9% | €736 1.0% | €907 1.2% | €69,602 |
| Subscriptions | €49,982 | €6,024 12.1% | €1,508 3.0% | €1,024 2.0% | €41,426 |
| Total | €523,272 | €42,166 | €8,804 | €27,424 | €444,878 |
Net = gross - discounts - cancellations - refunds. Fees = marketplace fees and payment fees; affiliate commission sits in marketing spend.
RV20New vs returning revenue
All streams: daily net revenue
Source: first_order flag derived from order history over all channels (email hash for guests), not from platform fields
RV21New vs returning per stream
Share of net revenue from new customers
- DTC webshop€93,700 new · €110,285 returning
45.9% new (-1.2 pts vs previous)
- Marketplaces€58,385 new · €38,777 returning
60.1% new (-0.4 pts vs previous)
- Affiliate€21,177 new · €11,526 returning
64.8% new (+1.8 pts vs previous)
- Wholesale / B2B€13,966 new · €55,636 returning
20.1% new (+0.2 pts vs previous)
- Subscriptions€7,119 new · €34,307 returning
17.2% new (+0.3 pts vs previous)
RV22Top 10 products and packages
DTC webshop: €159,108 of €203,985 net revenue (78%)
Source: order_lines (sku, quantity, discountedTotalSet / row_total / total)
| # | Product | Net revenue |
|---|---|---|
| 1 | Velours linen duvet set | €46,989 |
| 2 | Cashmere-blend throw | €26,069 |
| 3 | Figuier candle 220 g | €18,469 |
| 4 | Santal room spray | €14,463 |
| 5 | Velvet cushion 50x50 | €11,964 |
| 6 | Linen sheet set | €10,246 |
| 7 | Diffuser Maison No. 3 | €8,988 |
| 8 | Merino bed blanket | €8,024 |
| 9 | Gift set Soiree | €7,259 |
| 10 | Natural linen tablecloth | €6,637 |
RV23Health checks
4 to review, 7 within threshold (all streams, last 30 days)
- Marketplace fees 17.0% of net revenue, within 18%
- Marketplace refund and return rate 8.6%, within 9%
- Webshop refund rate 5.4%, within 6.5%
- MER 4.28x, stable or up vs 4.26x previous
- Platforms claim 76% of actual net revenue, overlap within 1.25x
- Contribution margin 20.5% (-0.1 pts vs previous), within tolerance
- DTC webshop is 46% of net revenue, no stream above 60%
Thresholds: affiliate cost of sale 10%, marketplace TACoS 12% and not rising, marketplace fees 18%, marketplace refunds 9%, webshop refunds 6.5%, booking cancellations 5%, nc-ROAS 2.0x, platform overlap 1.25x, lead win rate 30%, margin drop 1.5 pts, stream concentration 60%.