The Client
A home furnishings brand — case goods, seating, and storage — selling across marketplaces and its own site. A capable product team, a healthy catalogue, and a firm belief that it covered its categories well.
Client details are anonymised. Figures are representative of the engagement.
The Problem: Growth Had Stalled, and Nobody Knew Where to Look
The brand's revenue had plateaued. The categories it competed in were growing; its share of them was not.
The product team's instinct was to go deeper on what already worked — more variants of its bestsellers, more marketing behind its hero SKUs. That is a reasonable instinct, and it had diminishing returns, because the brand was already well-represented on the products it knew about. The growth was not in doing more of what it already did.
The harder question — what are we not selling at all? — had no owner and no data, because it is a question internal systems cannot answer. Sell-through reports describe products the brand stocks. They are silent on products it doesn't. A catalogue can look complete from the inside and have substantial holes that are only visible from the outside, against the full range of what the market actually offers.
The category lead put it directly: I can tell you everything about what we sell. I can't tell you anything about what we should be selling and aren't.
Why This Could Not Be Answered Internally
An assortment gap is defined by absence, and absence generates no internal signal.
No internal data source knows about products you don't stock. Your sell-through, your reviews, your returns, your search logs — all of them describe your existing catalogue. A product you have never listed appears in none of them. It is invisible for the same reason it is a missed opportunity: it simply is not there.
"We cover the category" is an untested assumption. Every brand believes it. The only way to test it is to enumerate what the category actually contains — the full listed assortment across the relevant competitors — and subtract what the brand offers. That is an external-data exercise by construction.
The gap hides at the variant level. A brand that lists a bookshelf in two widths when the market offers five has a gap that a category-level view ("we sell bookshelves") completely conceals. Finding it requires enumerating down to the variant.
The Solution: A Structured Assortment Gap Analysis
Product Data Scrape ran a home furnishings assortment gap analysis across the brand's defined competitive set.
- Defined the competitive set. The brand named the competitors whose range was relevant. A gap is only meaningful against a reference, and the reference has to be deliberate.
- Enumerated the full assortment. Every SKU the competitive set listed in the relevant categories was captured — not sampled, enumerated — down to variant level: every size, finish, configuration, and material.
- Matched against the brand's catalogue. The enumerated competitor assortment was matched against the brand's own SKUs at the variant level, on attribute identity rather than title.
- Classified every gap. Each SKU or variant the competitors listed and the brand did not was classified: a product category the brand did not offer at all; a variant of a product it did offer; a material or finish it was underrepresented in; or a gap that, on inspection, the brand had deliberately and correctly chosen to leave.
- Ranked by opportunity. Gaps were prioritised by observed competitor traction and by how easily the brand could fill them — a variant of an existing product being far cheaper to launch than a whole new category.
Sample Data: The Gap, Classified
An illustrative gap breakdown for one sub-category (storage furniture).
| Gap Type |
Count |
Example |
Effort to Fill |
| Missing variant of a product carried |
34 |
Bookshelf in 5-shelf and corner configs (brand had 3-shelf only) |
Low |
| Missing finish/material |
21 |
Wardrobes in walnut and white (brand had oak only) |
Low–Medium |
| Missing product in a carried category |
12 |
Shoe cabinets (brand had no shoe storage) |
Medium |
| Missing sub-category entirely |
3 |
Modular storage systems |
High |
| Correctly excluded (no action) |
18 |
Ultra-budget particle-board range off-brand |
None |
The structured record for one high-priority variant gap:
{
"gap_id": "STOR-GAP-0112",
"category": "storage_furniture",
"product_type": "bookshelf",
"gap_type": "missing_variant_of_carried_product",
"brand_carries_product_type": true,
"brand_variants": ["3_shelf_oak"],
"market_variants_available": [
"3_shelf_oak", "5_shelf_oak", "5_shelf_walnut",
"corner_unit_oak", "corner_unit_white"
],
"missing_variants": [
"5_shelf_oak", "5_shelf_walnut", "corner_unit_oak", "corner_unit_white"
],
"competitor_traction_signal": "high",
"effort_to_fill": "low",
"priority_rank": 4
}
The finding that reframed the brand's growth plan: the single largest bucket of opportunity was not new products at all — it was missing variants of products the brand already made, sourced, and photographed. Low-effort, high-return, and completely invisible until the market was enumerated against the catalogue.
What the Brand Did
Started with the low-effort variant gaps. The brand extended existing product lines into the sizes, finishes, and configurations the market offered and it didn't — no new suppliers, no new tooling, just filling out ranges it already ran.
Prioritised by the ranking, not by intuition. Because the gaps were ranked by traction and effort, the product team worked a list instead of a hunch, launching the highest-return gaps first.
Left the correct exclusions alone. The eighteen "correctly excluded" gaps — off-brand budget ranges — were documented and ignored, which mattered as much as the additions. A gap analysis that flags everything is noise; the value was in separating the misses from the deliberate choices.
Made it a standing feed. New competitor SKUs are now surfaced as they appear, so the gap list stays current and new market entries are caught while matching them still affects the season.
The Results (Two Quarters)
| Metric |
Before |
After Two Quarters |
| Variant gaps identified (actionable) |
Unknown |
55+ |
| New SKUs launched into identified gaps |
— |
Meaningful share of the list |
| Share of new-SKU revenue from variant gaps (vs new categories) |
— |
Majority |
| Category coverage vs competitive set |
Assumed complete, was not |
Materially higher |
| Revenue from newly filled gaps, indexed vs prior new launches |
100 |
148 |
| Effort per launch (variant vs new product) |
— |
Substantially lower |
Figures are representative of the engagement outcome.
The category lead's follow-up: the growth wasn't in going deeper on what we knew. It was in the range we didn't know we were missing.
The Lesson
Every brand believes it covers its category. Almost none has tested the belief, because testing it requires looking at the market from the outside — enumerating everything that exists and subtracting what you offer. It is the one competitive question internal data structurally cannot answer.
And when brands do test it, the answer is almost always the same: the biggest opportunity is not a bold new category. It is the quiet accumulation of missing variants — the sizes, finishes, and configurations of products the brand already makes, each too small to notice alone and substantial in aggregate. That opportunity is the cheapest revenue a product team can capture, and it stays invisible until someone maps the white-space.
Work With Product Data Scrape
Product Data Scrape delivers home furnishings assortment gap analysis: full variant-level enumeration of your competitive set, matching against your catalogue, gap classification that separates genuine misses from correct exclusions, and a ranked, deduplicated launch list — as JSON, CSV, API, or into your systems, with continuous new-SKU detection.
Ask us to map the white-space in your categories — we will hand you the ranked list of what your competitors sell that you don't.
Product Data Scrape — turning marketplace complexity into decision-ready data.