← Back to documentation

BUY-4004-catalog-search-relevance-report-2026-04-24

Catalog Search Relevance Report

Generated: 2026-04-24 UTC
Issue: BUY-4004

Scope

Run 20 catalog search queries against the local BuyWhere API and document:

  • top 3 results
  • whether the results are relevant
  • whether prices are populated
  • the top ranking issues observed

Test Environment

  • API endpoint: http://localhost:8000/v1/products/search
  • Auth: local SHA-256 API key seeded in local Postgres for this test run
  • Date tested: 2026-04-24

Coverage Check

Direct DB check on the local catalog snapshot:

  • Active products: 3,845,643
  • country_code = SG: 365,405
  • country_code = US: 385,247
  • country_code = AU: 0

This means AU has no local inventory in this snapshot. The more important finding is that AU and US-filtered searches still returned SG-tagged results instead of zero results or the correct market.

Results

Singapore Queries

  1. iphone 15 with country=SG Top 3: iPhone 15 Plus Pink 256GB (carousell_my, 2050.00 MYR), IPhone 15 Pro Urgent (carousell_my, 1500.00 MYR), Iphone 15 plus 128gb (carousell_my, 2000.00 MYR) Verdict: Mixed relevance. Product family match is good, but SG search returned carousell_my items priced in MYR. Price quality: Populated, but market/currency mismatch.

  2. wireless headphones with country=SG Top 3: sleep headphones headband (amazon.sg, 38.55 SGD), Boean Bluetooth headphones (amazon_us_electronics, 25.51 USD), ANC over-ear headphones (amazon_us_electronics, 114.84 USD) Verdict: Mixed relevance. All are headphones, but the top result is a sleep mask/headband variant rather than a mainstream headphone result. Price quality: Populated.

  3. protein powder with country=SG Top 3: protein powder travel container set (amazon_us, 21.65 USD), International Protein Superior Whey Chocolate (decathlon.sg, 135.00 SGD), International Protein Superior Whey Mango (decathlon.sg, 135.00 SGD) Verdict: Poor ranking. An accessory container outranks actual protein powder. Price quality: Populated.

  4. rice cooker with country=SG Top 3: Rice Cooker (carousell_sg_home_appliances, 50.00 SGD), mini rice cooker (amazon_us, 59.74 USD), mini rice cooker (amazon_us, 34.23 USD) Verdict: Mixed relevance. The intent match is correct, but cross-market US items rank high in SG search. Price quality: Populated.

  5. office chair with country=SG Top 3: Office Chair (carousell.sg, 10.00 SGD), ergonomic desk chair (amazon_us, 89.21 USD), mesh high-back office chair (amazon_us, 140.19 USD) Verdict: Mixed relevance. Intent match is fine, but SG results still skew into US inventory. Price quality: Populated.

Australia Queries

  1. air fryer with country=AU Top 3: Air fryer (carousell_sg_home_appliances, 30.00 SGD), air fryer paper liners (amazon_us, 15.21 USD), 6 QT air fryer (amazon_us, 71.01 USD) Verdict: Failed geo relevance. AU filter returned SG/US items. Price quality: Populated.

  2. laptop with country=AU Top 3: laptop desk for bed/couch (amazon_us, 40.77 USD), laptop bed table (amazon_us, 34.40 USD), adjustable bed desk for laptop (amazon_us, 89.21 USD) Verdict: Poor relevance. Accessories/furniture outrank laptops, and AU filter is ignored. Price quality: Populated.

  3. running shoes with country=AU Top 3: Running shoes (carousell_my, 50.00 MYR), recovery shoe (decathlon.sg, 119.00 SGD), duplicate recovery shoe (decathlon.sg, 119.00 SGD) Verdict: Failed geo relevance with duplicate results. Price quality: Populated.

  4. coffee machine with country=AU Top 3: Nespresso Pixie (amazon_us, 227.52 USD), espresso machine with grinder (amazon_us, 425.85 USD), mini espresso capsule machine (amazon_us, 178.42 USD) Verdict: Intent match is reasonable, but AU filter is ignored. Price quality: Populated.

  5. lego with country=AU Top 3: LEGO (amazon.sg, 72.70 SGD), LEGO (amazon.sg, 22.15 SGD), LEGO (amazon.sg, 0.00 SGD) Verdict: Failed geo relevance. AU search returned SG results only. Price quality: Third result is 0.00, which should not rank this high.

United States Queries

  1. iphone 15 with country=US Top 3: iPhone 15 Plus Pink 256GB (carousell_my, 2050.00 MYR), IPhone 15 Pro Urgent (carousell_my, 1500.00 MYR), Iphone 15 plus 128gb (carousell_my, 2000.00 MYR) Verdict: Failed geo relevance. US filter returned SG-tagged results from carousell_my. Price quality: Populated, but wrong market/currency.

  2. wireless headphones with country=US Top 3: sleep headphones headband (amazon.sg, 38.55 SGD), Boean Bluetooth headphones (amazon_us_electronics, 25.51 USD), ANC over-ear headphones (amazon_us_electronics, 114.84 USD) Verdict: Failed geo relevance. First result is SG; ranking also leans toward generic accessories. Price quality: Populated.

  3. dog food with country=US Top 3: dog food storage container (amazon_us, 30.50 USD), airtight dog food container (amazon_us, 44.99 USD), dog food scoop (amazon_us, 12.73 USD) Verdict: Poor relevance. Containers and scoop outrank actual dog food. Price quality: Populated.

  4. office chair with country=US Top 3: Office Chair (carousell.sg, 10.00 SGD), ergonomic desk chair (amazon_us, 89.21 USD), mesh high-back office chair (amazon_us, 140.19 USD) Verdict: Failed geo relevance. SG listing is still rank 1 for a US-filtered query. Price quality: Populated.

  5. coffee maker with country=US Top 3: coffee maker hot & iced (amazon_us, 69.90 USD), same product duplicate (amazon.com, 69.95 USD), same product duplicate (amazon.sg, 142.41 SGD) Verdict: Mixed to poor. Query intent is right, but duplicate clustering is weak and SG inventory leaks into US results. Price quality: Populated.

Cross-Market Queries

  1. macbook air Top 3: MacBook Air (carousell_my, 3599.00 MYR), MacBook Air M2 13.6 (bestbuy_us, 0.00 USD), MacBook Air M2 13.6 (bestbuy_us, 0.00 USD) Verdict: Mixed relevance. Intent match is good, but zero-price duplicates rank in the top 3. Price quality: Two top results have 0.00.

  2. sony wh-1000xm5 Top 3: Sony WH-1000XM5 (carousell_my, 900.00 MYR), Sony WH-1000XM5 (carousell_my, 850.00 MYR), premium noise-canceling headphones (amazon_us_electronics, 316.49 USD) Verdict: Best query in the batch. Results are clearly on-topic, though still SG-biased. Price quality: Populated.

  3. stanley tumbler Top 3: water bottle organizer for Stanley tumbler (amazon_us, 19.11 USD), replacement straws (amazon_us, 19.08 USD), Stanley Everyday Tumbler (amazon_us, 38.16 USD) Verdict: Poor ranking. Accessories outrank the core tumbler product. Price quality: Populated.

  4. dyson vacuum Top 3: Dyson vacuum stand holder (carousell_my, 28.00 MYR), Dyson battery (bestbuy_us, 0.00 USD), Dyson Gen5detect cordless vacuum (bestbuy_us, 0.00 USD) Verdict: Poor ranking. Accessory and replacement part outrank the actual vacuum. Price quality: Two top results have 0.00.

  5. nintendo switch Top 3: Nintendo Switch (carousell_my, 1000.00 MYR), pro controller (amazon_us_electronics, 100.75 USD), Switch 2 camera (bestbuy_us, 0.00 USD) Verdict: Mixed relevance. Rank 1 is correct, but accessory/peripheral results are too high. Price quality: Third result has 0.00.

Top 5 Issues Found

  1. Geo filters appear ineffective on this endpoint. country=US, country=AU, region=us, and region=sg all produced the same SG-heavy top 3 for iphone 15.
  2. Country metadata is inconsistent with source identity. Example: carousell_my results are returned with country_code=SG and region=sg.
  3. Ranking overweights accessories and containers. Queries like protein powder, dog food, stanley tumbler, dyson vacuum, and laptop ranked accessories ahead of the core product.
  4. SG bias is overwhelming, even for US-filtered queries and unfiltered cross-market searches.
  5. Zero-price items are allowed into top-ranked positions. At least five of the 60 top-3 results returned 0.00.

Summary

  • AU is effectively unusable in the tested local snapshot because there is no AU inventory and the filter does not fail closed.
  • US filtering also appears broken in the tested environment despite the catalog containing 385,247 active US products.
  • Relevance is strongest for precise branded queries such as sony wh-1000xm5.
  • Relevance is weakest for generic shopping intents where accessories can match the same token set as the target product.

Recommended Follow-Ups

  1. Reproduce and fix the country and region filter leak on /v1/products/search.
  2. Audit source -> country_code/region normalization, especially for carousell_my and US retailers surfaced as country_code=SG.
  3. Add ranking penalties for accessory terms like container, holder, liner, scoop, battery, strap, and straw when the head query implies a core product.
  4. Demote or suppress price = 0.00 results from the first page unless no priced alternatives exist.
  5. Add an automated regression suite around these 20 queries with assertions for geo correctness, price presence, and duplicate clustering.