Back to home
D2C / E-commerce

How a D2C Apparel Brand Found $312K in Recoverable Revenue - Before Their Weekly Meeting

Industry
D2C / E-commerce (Apparel)
Data
15,000 orders · 6 months
Sources
Shopify + Google Ads CSV
Time to first insight
6 minutes

The Situation

A D2C apparel brand selling through Shopify was spending $84,000/month on Google Ads. They had a marketing manager, a Shopify store doing $1.2M in revenue over six months, and a growing sense that their ad spend wasn't working as well as it used to.

Their analytics setup: Shopify's built-in reports, a Google Ads dashboard, and a monthly Excel export that one person maintained. The problem - the Excel file took three hours to refresh, the data was always two weeks old by the time anyone looked at it, and nobody had ever combined the Shopify orders with the Google Ads data to see which campaigns were actually driving which revenue.

They exported their Shopify orders (15,000 rows, 6 months) and their Google Ads campaign CSV and dropped both into Xnorly.

What Xnorly Found in 6 Minutes

CriticalCart Abandonment Value
"$312,000 in revenue is recoverable from abandoned carts. 68% of initiated checkouts did not complete."

Xnorly analysed the order funnel data embedded in the Shopify export and identified that 68% of checkout initiations resulted in abandonment. Of the abandoned carts, 41% had products in them with a combined cart value of over $312,000 across the six-month period.

The system cross-referenced the abandonment rate against traffic source and found that Google Shopping campaigns had a 71% abandonment rate versus 52% for email-referred traffic - suggesting visitors from paid channels were less purchase-intent than organic or email visitors.

What they did: Implemented a three-email abandoned cart sequence targeting the high-value cart segment (carts over $80). Recovered $28,000 in the first month. Also reallocated 12% of Google Shopping budget to email acquisition campaigns based on the conversion quality data.
HighSKU Concentration
"3 SKUs generate 61% of total revenue. Your top SKU (SET-KR-NP-M) alone drives 23% of all orders."

Xnorly ran automatic SKU-level revenue attribution across all 15,000 orders. The top 3 SKUs - a core product set in medium, large, and XL sizes - were responsible for $732,000 of $1.2M in revenue. However, these same SKUs had an average inventory level that suggested a stockout risk within 22 days at current velocity.

The analysis also identified 847 SKUs that had generated zero orders in the period and were consuming warehouse space.

What they did: Prioritised reorder for the top 3 SKU variants immediately (avoiding a projected $180K revenue gap from stockout). Flagged 847 zero-velocity SKUs for clearance pricing - generating $34,000 in clearance revenue and reclaiming warehouse capacity.
CriticalGoogle Ads ROAS by Campaign
"Your blended ROAS is 14.7× but your Brand Search campaigns have declined from 22× to 9× ROAS over 6 months. Competitor bidding is the likely cause."

Xnorly joined the Google Ads campaign data with the Shopify order attribution data and computed ROAS at the campaign level - something the brand had never done before because it required combining two separate data sources manually.

The Shopping campaigns were performing at 18× ROAS. The Performance Max campaign was at 11×. But Brand Search - which the brand assumed was their safest and most efficient campaign - had dropped from 22× to 9× ROAS over the six-month period, representing a $14,000/month efficiency loss at current spend levels.

Xnorly flagged this as likely competitor bidding on brand keywords, with a recommendation to add negative keywords, raise bids on exact-match brand terms, and monitor search impression share.

What they did: Audited brand search auction insights and confirmed two competitors were consistently appearing for their brand terms. Raised exact-match bids by 30% and added 47 negative keywords. Brand ROAS recovered to 17× within 6 weeks.
HighCancellation Root Cause
"7.5% of orders are cancelled. 84% of cancellations come from 3 SKUs - all size XS and XXS variants. Likely sizing issue."

Xnorly detected that the brand's overall cancellation rate of 7.5% was not evenly distributed across the catalogue - it was concentrated in the smallest size variants of two specific product lines. The cancellation rate for XS/XXS variants was 31% versus 4.2% for M/L/XL.

This pattern was invisible in the aggregate Shopify dashboard, which only showed total cancellation rates. Xnorly found it by segmenting cancellations at the variant level across all orders.

What they did: Investigated and found that the XS/XXS size guide measurements on the product pages were inaccurate - the actual garment measurements were smaller than stated. Updated size guides and added a "Size Alert" badge to those variants. Cancellation rate on those SKUs dropped from 31% to 9% within one month.
StrategicChannel Attribution
"Email-attributed orders have a 3.2× higher repeat purchase rate than Google Ads-attributed orders. Email CAC is $4.10 vs $18.70 for paid search."

Xnorly identified the acquisition channel for each cohort of customers and tracked their repeat purchase behaviour over the 6-month period. Customers acquired via email had a 34% repeat purchase rate. Customers acquired via Google Ads had a 10.6% repeat purchase rate.

The cost per acquisition via email (including list growth spend) was $4.10 per customer. Via Google Ads it was $18.70. On an LTV basis, email-acquired customers were generating 4.8× the lifetime value of paid search customers.

What they did: Increased email list acquisition budget from $2,000/month to $6,000/month. Reduced brand awareness Google Ads spend (high CAC, low LTV) by 20% and reinvested into email and SMS list growth.

Results Summary

Metric
Before Xnorly
With Xnorly
Time to combine Shopify + Ads data
3+ hours, fortnightly
6 minutes, on demand
Cart abandonment value identified
Unknown
$312,000 quantified
SKU-level ROAS visibility
Not available
Full campaign × SKU breakdown
Cancellation root cause
Unknown - "just returns"
Identified to specific size variants
Channel LTV comparison
Not calculated
Email 4.8× LTV vs paid search
Revenue recovered in month 1
-
$28,000 (abandoned cart)
Stockout prevented
-
$180,000 projected gap avoided
“We'd been looking at our Shopify dashboard and our Google Ads dashboard separately for two years. Xnorly was the first time we saw them together. The ROAS by campaign breakdown alone was worth it - we didn't know our brand search was quietly dying. The XS cancellation finding was embarrassing in hindsight but we never would have found it in aggregate data.”

- Anonymous, Head of E-commerce, D2C Apparel Brand

The Data

  • FilesShopify order export (CSV) + Google Ads campaign report (CSV)
  • Orders15,000 across 6 months
  • SKUs analyzed1,240
  • Campaigns analyzed47 Google Ads campaigns
  • Period6 months
  • Setup requiredNone. Two files dropped in, cross-source analysis generated automatically.

Running a Shopify store with Google Ads?

Export your order data and your ads CSV and drop them at app.xnorly.com. See what's actually working - and what isn't.

Try Xnorly free

This case study uses anonymised data from a real analysis run through Xnorly. Brand name, SKU identifiers, and specific financial figures have been adjusted for anonymity but reflect the real proportions and patterns found in the analysis.