Engineering Data

The Favora dataset

Personal fashion discovery needs the whole market in one schema. Nothing you can license comes close, so we built the machine that makes it.

2M+

Product images, structured for machines

366,242 items 5.1M pages / 30 days 100+ brands

6 min read Live production figures

2M+ product images in the catalogue
366,242 items tracked since November 2025; sold-out items keep their history
172,661 items live and searchable right now
5,148,711 pages crawled in the last 30 days
835,785 product URLs mapped across 100+ brands
178 subcategories under 25 top-level categories

The dataset is the product

Every recommendation Favora makes starts from the same problem: fashion e-commerce has no common language. Every brand publishes its catalogue differently. Different markup, different size systems, different names for the same colour. The feeds you can license are shallow, stale, and skip most of the brands people actually wear.

So we treat the catalogue as core infrastructure. It is not an input we buy. It is the thing we build, and everything else at Favora sits on top of it. It also compounds: every day of crawling deepens the price and availability history, and every enriched item makes the models trained on it better. The catalogue keeps what storefronts forget. Items that sell out or disappear stay, with their full price and availability history. A competitor who starts today starts with zero history, and there is no way to buy the past. That is not a dataset you download. It is one you would have to live through.

It is also buildable now in a way it was not two years ago. Models read messy product pages, tag them against a taxonomy, and embed every item for cents. The cost of one schema collapsed. The value of owning it did not.

From storefront to structure

Hermes, our data platform, turns raw storefronts into one uniform catalogue. The pipeline runs on Temporal, with workers in Python and Rust. Steady state is hands-off: failed work retries with backoff and nothing gets dropped. Humans step in when a storefront changes shape.

  1. 01

    Discover

    Scout maps every storefront we cover and keeps a registry of product URLs per brand. It finds new drops within hours and adds over a hundred thousand new URLs a month.

    835,785 URLs mapped

  2. 02

    Fetch

    The fleet fetches about 170,000 pages a day, every day. Per storefront the pace stays deliberately polite; we make it up in breadth. Storefronts that render client-side get a full browser, so we capture the page a shopper actually sees. Across everything we cover, 91% of tracked URLs resolve to a page we can parse.

    5,148,711 pages / 30 days

  3. 03

    Normalise

    More than a hundred storefront formats become one schema: prices and currencies, size systems, colour names, image sets, availability.

    100+ formats, one schema

  4. 04

    Enrich

    An LLM labels every item against our fashion taxonomy: 25 categories, 178 subcategories, plus colour, material, pattern, style and garment-type facets. New tagger models ship only after they beat a hand-labelled gold set. Every item also gets a vector embedding.

    Every item labelled and embedded

  5. 05

    Serve

    Everything lands in Postgres and a Typesense cluster: keyword, faceted and vector search over the full catalogue, powering feed, search and alerts in the app.

    Keyword, faceted, vector

Fresh by construction

A fashion catalogue rots fast. Prices move, sizes sell out, items disappear mid-season. So freshness is not a batch job here, it is the default state: the crawl fetches around 170,000 pages a day, which brings it back to every live item roughly once a day on average. A licensed feed cannot do that. This is what the machine is for.

Each successful fetch records price and availability for every listed size. Across a month that is millions of price and stock snapshots, a multiple of that at size level, and it is what makes size-aware sale alerts and back-in-stock notifications possible at all. When a saved item drops in price in a specific size, the record is already there.

Catalogued and live are different claims, and the gap between them is deliberate. The registry holds every product URL we have ever seen, including ones that are gone. The catalogue holds the ones that became items, and sold-out items keep their history. Live means buyable right now.

Structured for machines

The point of all this structure is not tidy data. It is leverage for models. Uniform taxonomy labels make retrieval and ranking trainable. Per-image metadata, like which images show the garment on a model and which show it flat, feeds the visual pipeline. Embeddings on every item make taste representable as geometry. Price histories turn "is this a good deal" into a computable question.

The dataset is built the way you would build a training set, because that is what it is.

It is also only half the data. Every like, save and dismissal in the app lands on top of it, tied to items we fully understand. The catalogue we can build with effort. The taste data only accrues with users.

Ten months in

We turned the pipeline on in November 2025. The catalogue crossed a hundred thousand items in February and stood at 366,242 by August 20. Almost half of that arrived in the last two months, and July was the biggest month yet, almost 120,000 items added.

Catalogued items, cumulative November 2025 to August 20, 2026, production catalogue
0100K200K300K400KNovJanMarMayAug366,242Aug 2026
Cumulative catalogued items by month
MonthItems
Nov 2025335
Dec 202520,148
Jan 202697,730
Feb 2026105,760
Mar 2026128,887
Apr 2026153,507
May 2026165,463
Jun 2026191,517
Jul 2026311,372
Aug 2026366,242

Talk to us

Most of the catalogue is still ahead of us: more brands, more markets, deeper visual understanding. If you are building in fashion, evaluating the space, or want to work on systems like these, write to humans@favora.ai. We are hiring, and we partner with brands.

All figures are live production metrics from our internal systems, captured on August 20, 2026. The counts move daily, mostly up.