Methodology
Every rule behind the numbers, with the thresholds the site actually uses.
What we collect, and what we don’t
From each brand’s own shop: the prices on its product pages, whether a sale is running and how deep, the fabric words in its product text, the number of products and collections it publishes, its platform, and any store, delivery or payment detail its own pages state. Every value is a count or a quotation from the brand.
The Type facet comes from the words a catalogue itself uses: lawn, kurta, shalwar kameez and unstitched fabric on one side; jeans, t-shirts, hoodies and co-ords on the other. A catalogue that leans neither way is recorded as Not classified rather than forced into a category.
We do not collect or estimate traffic, visitor numbers or popularity; we do not fill in a price a brand has not published; and we do not treat a weave name as evidence of a fibre.
Price bands
A band comes from the median listed price of the products we read (the field Median_Price_PKR), expressed as a share of a PKR 50,000 monthly wage (stored as Cost_vs_Wage_50k_Pct). The thresholds are constants in rules.py:
| Band | Median listed price | Threshold |
|---|---|---|
| Budget | under PKR 3,000 | 0% of a PKR 50,000 wage |
| Mid | PKR 3,000 to under PKR 8,000 | 3,000% of a PKR 50,000 wage |
| Premium | PKR 8,000 to under PKR 20,000 | 8,000% of a PKR 50,000 wage |
| Luxury | PKR 20,000 or more | 20,000% of a PKR 50,000 wage |
Brands that publish no price we can read are grouped as No price data rather than given a band. Sale prices are included in the median: the price on a product page is the price we record.
What “the price of a brand” means
We publish the lowest, median and highest listed product price (Price_Lower_Limit_PKR, Median_Price_PKR, Price_Upper_Limit_PKR). A brand has no single price, which is why the headline figure is a range and a median. A price below PKR 100 or above PKR 1,000,000 is discarded as a data error rather than published.
Fabric rules
| Class | Words we count |
|---|---|
| Natural | cotton, silk, linen, wool, cashmere, pashmina, hemp, jute |
| Regenerated (semi-synthetic) | viscose, rayon, modal, lyocell, tencel, bamboo viscose |
| Synthetic | polyester, nylon, acrylic, elastane, spandex, polyamide |
| Weave or finish — not a fibre | lawn, chiffon, georgette, organza, net, khaddar, karandi, cambric, jacquard, velvet, crepe, satin, boski |
Weave names such as lawn or chiffon are not fibres; we only count a fibre when the brand states it. Natural fibres stated needs at least 3 products and 5% of the catalogue to state a natural fibre, and fewer than 20% of the products that state any fibre to also name a regenerated or synthetic one. Viscose and rayon are regenerated, so they never count as natural.
Audience rules
Women, Men and Kids come only from product titles, product types, product tags, or collection titles and handles — never from navigation, footers or banners — and need at least 5 products and 3% of the catalogue. Each brand page prints the evidence behind its tags.
The value index
Sorted as “Best value”. Two derived scores, weighted as constants in rules.py:
value = 0.5 × quality score + 0.5 × affordability score
catalogue score = 40% natural fibre mentions + 20% fibre transparency + 20% catalogue breadth (distinct types/tags, capped at 25) + 20% shop records (stores, blog, 10+ collections); minus 10 when a brand names polyester or viscose and no natural fibre at all.
affordability = 100 × (1 − min(median ÷ 50,000, 1))
Worked example, using a real record from this build: Koyo, whose median listed price is PKR 5,499 across 453 products.
- PKR 5,499 is 11.0% of a PKR 50,000 wage, which puts it in the Mid band.
- Affordability = 100 × (1 − min(11.0% , 100%)) = 89.0.
- Its catalogue score is 49.8.
- Value = 0.5 × 49.8 + 0.5 × 89.0 = 69.4, which is the 69.4 the directory publishes for it.
What each sort means
- Best value — the value index above.
- Most affordable — the affordability score alone, ignoring fabric.
- Most documented catalogue — the catalogue score: 40% natural fibre mentions + 20% fibre transparency + 20% catalogue breadth (distinct types/tags, capped at 25) + 20% shop records (stores, blog, 10+ collections). It is a composite, not a judgement about quality.
- Largest catalogue — the number of products the shop publishes (
Product_Count). - Recently added, Price and Name sorts read the corresponding field directly.
What each filter option means
- Not classified — Neither predominantly Eastern nor Western in the catalogue text.
- No price data — The brand publishes no price we could read, so it has no price band.
- Women — At least 5 products and 3% of the catalogue name women, ladies or girls in their titles or tags.
- Men — At least 5 products and 3% of the catalogue name men or mens in their titles or tags.
- Kids — At least 5 products and 3% of the catalogue name kids, boys, girls, junior or baby in their titles or tags.
- Has physical stores — The brand lists a physical store or showroom.
- Instagram-only (no web shop) — No online shop could be read; the brand sells through Instagram.
- No price or catalogue data — Neither a price nor a product count could be read from the shop.
- Sale detected in the last 7 days — A sale first appeared in the last 7 days.
- Natural fibres stated — At least 3 products and 5% of the catalogue state a natural fibre, and under 20% of fibre-stating products also name regenerated or synthetic fibres.
How fresh the data is
The directory is rebuilt when the scraper reruns, and the footer shows the date of the build you are reading. Prices and sales in Pakistan move quickly, so treat every figure as a snapshot and confirm it on the brand’s own site. Each brand page states the date its catalogue was read.
Corrections
Every brand page has a “report an error” link that pre-fills the brand and the page URL. Corrections go to data@brandlist.pk; the listing is re-read from the brand’s own shop. Rights-holder and takedown requests go to legal@brandlist.pk instead (see the Terms).