Luigi.
How custom size-aware product feeds + Facebook audience targeting tripled revenue for one of Greece's largest fashion eshops — by fixing an out-of-stock problem nobody else was solving.
Users were seeing products they couldn't actually buy
Luigi is one of the largest fashion eshops in Greece. After seven years of operation it employs 45 people, runs an in-house photo studio and design team, and was presented as a success story at the largest Google Retail event ever held in Greece. By spring 2020, every textbook performance lever had already been pulled — landing page tests, audience refinements, creative rotation, bid strategy experiments. The easy wins were gone.
Deep analysis of the eshop data surfaced something subtle but massive: conversion rate could lift by up to 30% if every paid visitor saw only products that were in stock in their specific size. A T-shirt marked "in stock" is, for a size-M customer, effectively out of stock if the remaining inventory is only XL. The product appears available to the system, unavailable to the human — and the gap between those two states was silently killing CR on every fashion ad click.
Standard CRO work could not solve this. Landing page copy, checkout flow, trust badges, discount stacking — none of them address the root issue, which lives upstream in the product feed. The fix required rebuilding how availability is represented per user, then propagating that representation into every Meta audience and creative. That is not a CRO optimization; it is a feed engineering problem.
Per-user size-aware feeds — out of stock at the personal level
We rebuilt the Meta product feed with custom labels encoding size-level availability for every SKU. Instead of one flag per product ("in stock" / "out of stock"), the feed now carries per-size stock state, updated from the live inventory API every 15 minutes. The feed became the source of truth for all downstream ad logic — no more stale assumptions about what was actually buyable.
To match users to the right feed slice, we deployed custom cookies that capture each user's size preference from first-party signals: sizes they filtered by, product pages they viewed in detail, and past purchases. No third-party tracking, no iOS 14.5 fragility — just first-party data captured at the user's own interaction pace. After a small number of sessions, the system has a confident size hypothesis for the user.
On Facebook, audiences were restructured around the intersection of browsing size × product size × live stock. Instead of one ad set per product category, we ran targeted ad sets per size cohort, each pointed at the subset of the catalog that was actually purchasable for that cohort in that moment. Dynamic creative adapted to the cohort, and the CRO lever moved from landing-page tweaks into feed architecture — where the real leverage was.
Three layers of personalization
Feed Architecture
Rebuilt the Meta product feed with custom labels encoding stock × size combinations, updated every 15 minutes from the live inventory API. The feed became the source of truth for all ad targeting logic — stock state changes propagate automatically into creative and audience assignment without manual intervention.
User-Level Size Capture
Custom cookies capture size preference from browsing patterns (sizes filtered, products viewed in detail) and past purchases. First-party data only, fully compatible with iOS 14.5 and cookieless futures. After a handful of sessions the system has a confident hypothesis about which size cohort the user belongs to.
Targeted Ad Sets
Restructured Meta campaigns around size cohorts × product availability. Each user sees only the subset of the catalog that is actually purchasable in their size at that moment. Dynamic creative adapts accordingly, so the ad itself feels relevant, not just available.
The Results
Revenue Growth
Revenue tripled in the Spring-Summer 2020 window — a step change that no amount of vanilla CRO work could have produced. The lift came from eliminating the hidden out-of-stock problem that silently capped CR for every fashion ad click.
Conversion Rate
Site-wide CR lifted 21%, close to the 30% theoretical ceiling identified in analysis. The remaining gap is legitimate: stock levels fluctuate between refreshes, and not every user has a stable size preference the system can lock onto yet.
Transactions
Transaction volume grew 174% — the compound effect of higher CR multiplied by higher qualified traffic from better-targeted ads. Each improvement amplified the other, which is the hallmark of fixing a root-cause problem instead of a symptom.
Feed Refresh Interval
Product feed refresh interval — tight enough that stock changes propagate to ads before they can drive a frustrated click. Below 15 minutes the infrastructure cost stops being worth it; above, the CR gain starts eroding.
More Case Studies
View allReady to unlock CR you didn't know you had?
Let's audit your product feed architecture and find the personalization levers that vanilla CRO misses.
Start a conversation