"Where should I push my ad budget, and by how much?" This is the most common question we hear from Shopify EC operators in the ¥10-50M monthly revenue range. Pushing budget to the highest-CVR channel does not lift revenue. Pushing to the highest-ROAS channel only adds operating overhead. Without a single decision axis, budget allocation drifts and performance plateaus.
TL;DR
- Three illustrative case studies — apparel (+15%), general goods (+8%), food/D2C (+22%) — demonstrate the Revenue Per Session (RPS) -first ad-budget reallocation workflow
- The framework is shared: ① anchor on industry RPS median, ② plot each channel on RPS × CVR four-quadrant, ③ shift budget from low-RPS into high-RPS channels
- Case C (food/D2C) failed in the first three months because measurement gaps (UTM drift, Safari ITP cookie loss, last-touch-only attribution) skewed the numbers driving the decisions
Why RPS, not CVR
Revenue Per Session (RPS) = Revenue ÷ Sessions. It captures revenue efficiency in a single number that integrates AOV (average order value) and CVR (conversion rate). The relationship is RPS = AOV × CVR.
If you watch only CVR, you can miss the AOV crash that cancels out the CVR lift. We see this often: "CVR went from 2.0% to 3.5% — winning!" — except AOV dropped from ¥6,000 to ¥3,500 and RPS barely moved (¥120 → ¥122.5). Revenue did not change.
RPS as the primary axis answers the operational question — "which channel actually generates revenue?" — with one number.
Note: RPS is not yet a widely standardized industry term. We use it because it captures the AOV-CVR composite in a single metric.
Three-Case Overview
The shared framework: plot each channel on a two-axis (RPS × CVR) quadrant. Shift budget from Q3 (both low) into Q2 (both high) or Q1 (high RPS / low CVR).
Case A: Apparel EC — Channel Rebalancing for RPS+15%
Starting point: ¥25M monthly revenue. 70% of ad budget on Meta. Meta CVR 2.1%, Google Search 1.4%, organic 1.8% — Meta looked dominant.
The gap: On RPS, Meta was ¥72, Google Search ¥110, organic ¥95. Meta AOV (¥3,400) was less than half of Google Search AOV (¥7,800). Meta drove high-volume, low-AOV traffic.
Action: Cut Meta to 40%, reallocate to Google Search (20%), organic SEO (20%), retargeting (10%). Switched Meta to catalog ads prioritizing higher-AOV items.
Outcome: Overall RPS ¥85 → ¥98 (+15%). Revenue ¥25M → ¥28.4M. Meta CVR dropped 2.1% → 1.7%, but AOV climbed ¥3,400 → ¥4,800, so Meta RPS itself improved ¥72 → ¥82. Past the apparel industry median of ¥90.
A high-CVR channel is not automatically a high-efficiency channel. Channels with low AOV "drive volume without driving revenue."
Case B: General Goods EC — AOV Lift for RPS+8%
Starting point: ¥12M monthly revenue. Even budget split. RPS ¥75, near the lower end of estimated industry median ¥80-100. Increasing ad spend no longer produced proportional revenue.
The gap: Per-channel RPS was tightly clustered (¥68-82). Channel mix wasn't the bottleneck. Sitewide AOV ¥3,200 was.
Action: Kept channel mix. Site-side investment: free-shipping threshold ¥3,500 → ¥5,000, "frequently bought together" module, Klaviyo cart-recovery, hero/CTA A/B test.
Outcome: Overall RPS ¥75 → ¥81 (+8%). AOV ¥3,200 → ¥4,100, CVR slight drop (1.6% → 1.55%). Revenue ¥12M → ¥12.95M.
When per-channel RPS is tight, reallocating channels won't move RPS. Sitewide AOV lift becomes the higher-priority lever.
Case C: Food/D2C EC — Failure, Then Measurement Fix for RPS+22%
The largest lift — and the one that failed first.
Starting point: ¥48M monthly revenue. D2C food. CVR 3.2% (food median ~3.0%). RPS ¥125, below median ¥135.
Initial failure (months 1-3)
The team adopted RPS-first decisions but pushed budget to the wrong channel because of measurement gaps:
- UTM drift: utm_source=facebook and Facebook were tagged as separate channels, undercounting Meta-attributed RPS
- Cookie limits: Safari ITP suppressed Meta-attributed conversions
- Last-touch only: Assist effect ignored, organic search undervalued
The team cut Meta and shifted to Google Search — wrong call. Three months in, RPS moved ¥125 → ¥128 (+2.4%). Revenue ticked up, but retargeting cuts likely cost some repeat-purchase opportunities.
Measurement fix (months 4-6)
Rebuilt the measurement layer:
- UTM auto-normalization: lowercase + trim across all utm_source variants
- dataLayer redundancy: capture revenue from GA4 ecommerce dataLayer.push as a parallel path
- Last-touch + assist hybrid: last-touch primary, assist visible for any touch within 3 clicks
Outcome: RPS ¥128 → ¥152 (+18.8%). Cumulative ¥125 → ¥152 (+22%). Revenue ¥48M → ¥58.56M. Past the median of ¥135.
RPS-first decisions presuppose accurate measurement. If UTM drift, cookie loss, and attribution model are not handled, the very numbers driving the decision are skewed.
Industry Median Anchor
Industry RPS medians vary 2-3× across categories. Without an industry-anchored starting point, you misread your own headroom.
Three Common Decision Axes
- Anchor on industry RPS median — know whether you're below or above
- Plot each channel on RPS × CVR matrix — shift Q3 budget into Q2 or Q1
- Measurement accuracy is a precondition — UTM, cookie loss, attribution all matter
The Japanese B2C EC market reached ¥26.1 trillion in 2024. Migrating from CVR-only judgment to RPS-as-primary is mostly a KPI configuration change in your dashboard — not a tooling overhaul.
What's your team using as the primary axis for ad-budget decisions today — CVR, ROAS, or something composite? Have you run into the same measurement-layer failures Case C did?



Top comments (0)