Build Notes · June 2026

How a Bottle of Olive Oil Became a Shopping Agent

It began with a question I’ve asked at half the grocery stalls in Chiang Mai: is this olive oil too cheap to be real?A 5-litre jug for 1,500 baht. By the time I’d talked it through with Claude, I had a tool that scrapes Lazada Thailand, reads the reviews, and tells me what to buy — and, just as importantly, tells me when it’s wrong.

The 8-baht-per-litre tell

Real extra-virgin olive oil basically can’t exist below a certain price. So the first thing the tool learned was the math: parse the size, divide the price, and flag anything that’s suspiciously cheap per litre. A “5L extra virgin” at 180 ฿/L isn’t a bargain — it’s the classic adulterated-or-mislabeled profile. Pomace, “pure,” and “grade 1” got their own badges, because none of them are what the label implies.

Then the reviews. The single most useful signal turned out to be a buyer writing “authentic, but notextra virgin” under a product proudly labeled Extra Virgin. The agent now reads those.

Three ways to shop

The tool grew three modes, each matching something I actually do:

  • Vet one shop — a single search returns a ranked report with buy/skip verdicts and ฿/L on every bottle.
  • Fill one basket — give it lentils, chickpeas, tahini and it shows what a single seller covers, so you pay one shipping fee.
  • Find a shop — give it a grocery list and it finds which seller carries the whole thing.

The parts that fought back

Lazada doesn’t make this easy. Search results don’t reveal the seller — that only lives on the product page — so “find a shop” means searching each item, opening the top results, and reading the shop link off each one. In-shop search hides behind an undocumented storefront URL. And the data renders client-side, so the whole thing runs a real headless browser on a residential connection.

The most interesting fight was the anti-bot system. Open too many product pages too fast and Alibaba quietly redirects you to a “punish” page — no error code, just an empty result. Early on, the tool couldn’t tell that apart from “this shop has no tahini.” It does now: it watches for the punish-page signature, backs off the moment it sees one, and tells you plainly that you’re rate-limited rather than pretending the product doesn’t exist.

The lesson worth keeping

An agent that’s honest about its own failures beats one that’s confidently wrong. The verdict engine is useful; the block detector is what makes it trustworthy. And the deeper takeaway is architectural: bulk scraping from one server IP is fragile by design. The version that truly scales pushes the work into each user’s own browser — their session, their IP, their captcha-free traffic. That’s the next build.

For now it’s a local tool — it needs Chrome and a residential IP, so the live scraper only runs on my machine. But the ideas travel. See the tool, or poke around the rest of what I’m building.

Stay in the loop

Drop your email or WhatsApp to get notified when I'm in your city, drop a new video, or release new tools.

You're on the list!

Talk to you soon.