A full read of a live storefront — every used, open-box, and pre-loved outdoor and cycling
listing across the catalog. One link in, zero manual setup, this is what came back.
This retailer sells used and open-box outdoor and cycling gear on Shopify — Smartwool, The North Face, Rapha, Patagonia, Norrøna, Castelli, and dozens more. Each listing carries several individually graded physical units behind it, each with its own condition, price, and availability — so the row grain that matters is the variant, not the product. Like any graded-resale business, the entire proposition rests on one promise a shopper has to take on faith before they ever touch the product: that the condition grade on the listing is the condition of the gear that shows up.
That means condition isn't back-office data — it's the transaction. A shopper choosing "Excellent" over "New" is trading price for a specific, understood level of wear. When the field that's supposed to carry that grade instead carries an internal reservation code, or when a size and a condition swap places on the page, the shopper isn't just looking at messy data — they're looking at a promise the storefront can't keep.
EKOM ran this retailer's live public storefront through our analysis pipeline exactly as we would a new account's catalog: one link, no hand-built schema, no one telling the system it was looking at used outdoor gear or what "condition" was supposed to mean. What came back was concentrated in exactly the place a graded-resale business can least afford it — the condition field itself, carrying internal reservation IDs out to the customer — alongside two entirely different products sharing one product ID, cross-brand description contamination, and a shipping-weight gap that ranges from zero to a physically impossible ten kilograms. None of it required access to the retailer's own systems to find.
This retailer runs on Shopify. No one briefed the system on what kind of store this was, how to model graded resale inventory across dozens of brands, or what to look for — it had to work all of that out on its own before a single finding could be trusted.
No one flagged this one in advance — it surfaced because the pipeline checks a listing's own fields against each other, not just against a rulebook. It's also the most complete cross-contamination found in this pass: not one wrong field, but an entire attribute set transplanted from an unrelated SKU.
Three passes ran before any finding was generated. Each builds on the last — no step was told what the one before it found.
Two corrections below are pattern-based and high-confidence — ready to apply once the retailer confirms the pattern. The catalog-wide flags that follow require a business decision or data only the retailer has.
| Finding | Severity |
|---|---|
| A women's Smartwool merino tee and a men's Lacrosse fishing boot — unrelated products — share one product_id. Will corrupt page rendering, inventory aggregation, and dedup logic. A replacement ID has to be assigned by the platform or sourced externally. | Critical |
| A wide set of items carry compare_at_price = 0.00 or blank instead of the original retail MSRP, erasing the discount signal a resale storefront depends on. The correct retail prices need sourcing from brand sites or the retailer's own purchase records — not derivable from the catalog alone. | Critical |
| At least one variant shows price above compare_at_price — Ortovox Mens 185 RockNWool LS Top (XXL): price $148.00 vs. compare_at $110.00 — so the crossed-out "MSRP" reads below the asking price. We report the factual pattern only; its characterization is a business and legal call, not EKOM's. | Critical |
| A subset of catalog items — sourced via a Shopify Collective / dropship feed — use an entirely different option schema (Color/Size instead of condition/size_and_size2/color), retail pricing, and a foreign product-type taxonomy, making them structurally invisible to every condition-based filter on the site. | High |
A representative cut of the 200 analytical findings, grouped by root cause. Where the fix is mechanical, EKOM can propose and apply it directly once connected to the retailer's catalog. Where it depends on the retailer's own records or a business call, it's routed accordingly.
| Finding | Sev. | Resolution |
|---|---|---|
| Condition & Grade Integrity — the field the business rests on | ||
| Internal reservation IDs and dedup suffixes appended to condition values (Excellent_RES######) across hundreds of items | Critical | EKOM proposes |
| At least four naming conventions for the condition/size/color option axes, including fully swapped slots on several Rapha Core Jersey variants | Critical | EKOM proposes |
| A Burton half-zip pullover is entered as a single "Default Title" variant with no condition, size, or color structure at all | Critical | Retailer decision |
| Identity & Structural Integrity | ||
| Smartwool Womens Merino SS Tee and Lacrosse Mens San Juan Boot — unrelated products — share one product_id | Critical | Needs platform ID reassignment |
| Three Rapha products return a persistent HTTP 500 on the retailer's own server — invisible to this pass and, likely, to search | High | Retailer's server team |
| Shopify Collective / dropship items use a foreign option schema and taxonomy, structurally excluded from condition-based filtering | High | Retailer decision |
| Cross-Contamination — content from the wrong product entirely | ||
| Danner Women's Jag Boot carries a full hydration-bladder attribute set (bite valve, Mountain Biking, 50–100 oz capacity) | Critical | Needs manufacturer re-ingestion |
| Two Obermeyer boys' jackets serve the Marmot Men's Prescott Jacket description, verbatim | Critical | EKOM proposes |
| Obermeyer Women's Janis Down Jacket has vendor set to "Marmot" — absent from Obermeyer's own brand page as a result | Critical | EKOM proposes |
| Toad & Co Womens Earthworks Pant carries ski construction specs and Best Use = "Backcountry Skiing" from an unrelated ski product, plus the wrong gender | Critical | EKOM proposes |
| Pricing & Trust | ||
| compare_at_price = 0.00 or blank on a wide set of Used/Mixed items, erasing the discount signal | Critical | Needs sourced retail MSRP |
| Ortovox top: price ($148.00) exceeds compare_at_price ($110.00) — strike-through reads below asking price | Critical | Retailer decision |
| Fulfillment & Shipping | ||
| Houdini Womens Liquid Rock Short: grams = 10000 — a physically impossible 10 kg trail short (typical ≈250g) | Critical | EKOM proposes |
| 16 of 30 spot-checked shippable items carry grams = 0 with a populated Weight field available to derive from | Critical | EKOM proposes |
| Categorization — every one breaks category browsing | ||
| 24+ items carry a product_type flatly wrong for the product — pants as "Beanies," jackets as "Gloves," a bra as "Shell Jackets" — verifiable from the title alone | Critical | EKOM proposes |
| The North Face ThermoBall jacket carries a raw pipe-delimited tag string in product_type instead of a taxonomy value | Critical | EKOM proposes |
| Discovery & Facet Integrity | ||
| option3_value (color) missing, malformed, or hex-mismatched across dozens of variants — swatches render wrong or blank | High | EKOM proposes |
| Gender mixes single values, comma-concatenated multi-values, a disagreeing duplicate field, and outright mislabels | High | EKOM proposes |
| size_and_size267 — a typo'd option name — appears exactly once across the full catalog's own value counts | Medium | EKOM proposes |
| Description Quality | ||
| Multiple items (Black Diamond, Rab, Gnara, Eddie Bauer, The North Face) serve raw attribute-dump text as the description instead of marketing copy | Medium | Needs sourced marketing copy |
| Two descriptions are literal data-corruption artifacts — one is the string "0," another is UTF-8 read through Windows-1252 | High | EKOM proposes |
A large share of this pass's findings touch fields that were emitted as populated — not blank, not missing from any completeness report the retailer might already run. They're wrong, or wrong in a way that reads as complete. That's a harder class of problem to catch than a blank cell, and it's most of what surfaced here.