Auditing an e-commerce business

Seasonality, margin and catalog, with the Grosbill case.

Pile of taped cardboard parcels

Read an e-commerce business at the contribution margin and on the calendar. Revenue flatters a store that pushes low-margin products through paid traffic, and a twelve-month average hides the few weeks that decide the year. Make those two corrections first, then go through the catalog, where most of the fixable pages sit.

For this chapter, say an online retailer doing 8M in annual revenue, with 12,000 products and a year that hinges on Black Friday. The figures attached to that retailer are illustrative. The Grosbill results further down are real.

Rebuild the margin per order before judging any channel

Ask finance for order lines with product cost, shipping and packing cost, payment fees and returns, then get ad spend by channel and category. Most stores have these in separate systems, and joining them is the first useful thing the audit does.

Contribution per order = net revenue (excluding VAT, after returns)
                       - cost of goods
                       - shipping and packing
                       - payment fees
                       - ad cost attributed to the order

Break-even ROAS = 1 / contribution margin rate before ads

That second line changes how the ad account reads, because the same ROAS means opposite things in two categories.

Category Margin rate before ads Break-even ROAS Reported ROAS Reading
Large appliances 12% 8.3 6 Each order loses money unless repeat purchases pay it back
Accessories 40% 2.5 4 Profitable, probably underfunded

An account-level ROAS would average these two lines and hide the decision. Run the same split for peak and baseline:

SELECT
  p.category,
  CASE WHEN o.ordered_at::date BETWEEN '2025-11-17' AND '2025-12-01'
       THEN 'peak' ELSE 'baseline' END AS period,
  SUM(i.quantity * i.unit_price_net) AS net_revenue,
  SUM(i.quantity * (i.unit_price_net - i.unit_cost)) AS gross_margin,
  COUNT(DISTINCT o.id) AS orders
FROM order_items i
JOIN orders o ON o.id = i.order_id
JOIN products p ON p.id = i.product_id
WHERE o.status = 'completed'
  AND o.ordered_at >= '2025-01-01'
  AND o.ordered_at < '2026-01-01'
GROUP BY 1, 2
ORDER BY 1, 2;

Change the dates to your own peak. A category can gain a lot of revenue in peak weeks and little margin once discounts are in. That is often the first finding worth showing the founder.

Treat seasonality as a list of deadlines

Collect at least two full years of weekly revenue, three if you have them, and compare each week with the same week a year earlier. Month-on-month comparisons mostly measure the season. List every peak, its share of annual revenue and its share of annual margin. The gap between those two shares tells you how much the peak really earns.

Then audit the preparation of the last peak with dates, since a peak is decided by what shipped in the months before.

Item What to collect What a finding looks like
Seasonal pages Publication date of each page, first impression in Search Console Pages go live a few weeks before the peak, too late to be indexed and ranked
URLs Whether the seasonal URL changes each year Each edition restarts from zero
Paid landing pages Final URLs of peak campaigns Ads land on a generic listing
Stock Stockouts on best sellers during the peak Budget kept running on unavailable products
Site stability Errors and load times on peak days The checkout slowed down at the moment of highest demand
Discounts Discount depth by category against break-even Promotions set by habit, with no margin floor

Attribution gets harder at peak too. Last click flatters brand search and promo emails while the demand was created earlier, so compare total margin between peak periods before crediting any single channel.

Storeroom stacked with boxes

What the Grosbill case shows

Grosbill is the clearest example I can give of a peak won in advance. Most retailers treat Black Friday as a promotion and start a few weeks before. We created dedicated xxx-black-friday pages for products and categories several months ahead, optimized them for searches combining a product or category with Black Friday, and then built ad versions so paid traffic landed on a page made for it.

Over the period, revenue from ads was multiplied by 7 and revenue from SEO by 4. On the SEO side, 47% of the revenue came from these pages alone.

Two checks come straight out of that case. First, for your top categories by margin, verify that a seasonal page exists today and that it has been live long enough to be crawled, indexed and to earn its position. If you need many of them, the chapter on production and indexing covers the part that takes time. Second, compute the share of peak SEO revenue that lands on seasonal pages. It tells you whether those pages carry the peak or whether your generic listings are doing the job by default.

Cardboard dividers seen from above

Read the catalog as a portfolio

A catalog of 12,000 products can’t be audited page by page. Export one row per product with category, net revenue, margin, sessions, organic clicks, stock status and indexability, over twelve months, then sort every product into a segment.

Segment Test Action
Stars High margin, high sales Protect stock, ad budget and page quality first
Hidden margin High margin, few sessions Move up in category pages, add internal links and budget
Traffic without margin Many sessions, low margin Add cross-sell, cut paid spend
Dead weight No sale and no click in twelve months Consolidate or remove, redirect where a close equivalent exists
Unavailable Out of stock often or for good Keep temporary stockouts live with alternatives, redirect discontinued products to the closest match

The technical part follows the same logic, by template. Faceted navigation is the first place to look on a store, because filters can generate far more URLs than you have products; Google has a dedicated guide on managing it. Check for manufacturer descriptions copied across products and for category pages that offer only a grid. Don’t open a category or a filter page until it holds at least five products.

Review each template in turn, HTML first and then ergonomics and CRO: home, category, product, cart, checkout. Ask what each page is for, and put the useless ones in the trash. Think about who lands on a product page: someone comparing, someone ready to buy, and an existing customer looking for a reorder or a spare part. Each one needs a different next step, and a page with one CTA serves only one of them.

For the purchase funnel, the GA4 e-commerce events give you the stages: view_item, add_to_cart, begin_checkout, purchase. Split them by device and by new versus returning customer, because a global checkout rate averages very different people.

Then go past the first order. Group customers by month of first purchase and measure the rate of second orders and the delay between them, as described in the retention chapter. Compute the same by first category and by whether the first order came at peak. Peak customers who never return change what a Black Friday acquisition is worth, and LTV must be computed on margin.

Deliver a plan dated from the next peak

The deliverable has four parts: margin by channel and category, the peak calendar with its findings, the catalog segments, and a prioritized action sheet where impact is expressed in margin. Then lay it over the 6-month roadmap, counting back from the date of the next peak.

Time before the peak Work
6 months Rank categories and products by margin, define the seasonal template
5 to 4 months Publish seasonal pages, link them from categories
3 months Build ad versions, verify purchase tracking and margin data
2 months Test the pages and the checkout, then stop structural changes
1 month Lock stock, margin floors and creative, run load tests
After the peak Analyze cohorts, keep the pages live for next year

Your next step: take the date of your next peak, count back six months and see which line of that table you are on. Then list your twenty best categories by margin and write the live date of each one’s seasonal page next to it. The empty cells are your first week of work.