How this works

Built and written entirely by AI (Claude). ← Back to the live listings

A pipeline that scrapes second-hand and discounted kitesurf/wing-foil kit from ~15 UK (and one NL) shops twice a week, normalises it, and publishes it here and by email.

Pipeline

  1. Scrape. Each shop's second-hand/sale pages are fetched every run. Shopify and WooCommerce shops share a generic adapter each; four other shops run bespoke parsers built for their specific site structure.
  2. Extract. Raw listing text (title, description, price, size string) is sent to Claude, which returns structured fields: brand, model, size, condition (New / Used / Ex Demo), year, price. This is what turns a raw variant string like C55black/sand / 5'9'' - 80L into a clean size of 5'9".
  3. Filter by discount. Anything explicitly used/second-hand/ex-demo is always kept. Anything else (new stock on a "sale" page) is kept only if discounted 30%+ off; otherwise it's treated as full price and dropped.
  4. Categorise. Each item is classified into Kite, Trainer Kite, Foil Kite, Board (Twintip/Foilboard/Surfboard), Bar, Bindings, Package, Foil Gear, Wing, Harness, or Accessory. Which categories actually ship is a hard on/off switch in the code — Trainer/Foil Kites, Foilboards/Surfboards, Packages, Foil Gear, Wings and Harnesses are currently off.
  5. Diff against the last run. Each listing has a stable key (shop + shop's own product ID). This run's key set is compared against the previous run's saved set: not-seen-before = new, seen-last-time-but-gone-now = delisted/sold. Only new listings go in the email; delisted ones drop off the live site.
  6. Deliver. The email goes to every subscriber, filtered by whatever category/brand/price preferences they've saved. The site always shows the full current inventory, filterable and sortable by the same criteria, no login required.

Infrastructure

Known limitations

← Back to the live listings