← All Field Notes WORKFLOW OPERATIONS · OCTOBER 2026

I Kept Checking Prices by Hand, So I Built a Bot That Runs Two Price Sites

By Jon Ng, Founder, Novatise · 4 min read · 30 October 2026

In Singapore, if you want to sell an old phone or buy gold, the honest answer to "where's the best price?" is usually "it depends on the day and the shop."

The problem: prices everywhere, no single view

Shops publish their own price lists on their own websites. Phone shops list trade-in and cash buyback prices for each model and storage size. Jewellers and banks list gold rates per gram. The prices change often, and every shop formats them differently.

So I did what most people do. I opened the shop websites one by one, every morning, and compared them by hand.

It was slow, easy to get wrong, and the moment I finished, some of the prices were already out of date. It was exactly the kind of repetitive job a bot should do.

The fix: a bot that reads the prices for me

I built a bot that does the checking, and it now runs two public sites:

  • phoneprices.sg compares phone trade-in, cash buyback and new phone prices from Singapore shops. As of 30 October 2026 it covered 503 phone models from 10 sources, updated daily.
  • goldprices.sg compares 916 and 999 gold rates per gram from Singapore jewellers and a bank. As of 30 October 2026 it tracked 8 sources and checked them several times a day.

How the bot works, at a high level

The idea is simple. The care is in the details.

1. Read only what shops publish

The bot visits the price lists each shop publishes on its own website. It doesn't guess and it doesn't use private data. If a shop doesn't publish a price, it isn't on the site.

2. Match every price to the right product

A phone shop might write "iPhone 15 Pro 256GB" while another writes it a slightly different way. The bot matches each listing to one model and storage size, so you are comparing like with like. For gold, it keeps 916 and 999 separate, and keeps selling prices, cash buyback and trade-in rates apart so they are never mixed.

3. Copy prices exactly, never estimate

Prices are copied as shown. Rows that say "WhatsApp us", "Pending" or "Coming soon", or that the bot can't read reliably, are left out rather than filled in. Where a shop only states a flat rule, like a fixed deduction if you don't trade in, the price is worked out from that rule and labelled clearly.

4. Check that the numbers make sense

For gold, every value is checked against the international spot price. If a number looks impossible, it is dropped, not guessed. Each shop's own timestamp is kept where it gives one, so you can see when a shop last updated, and stale rates are flagged.

5. Publish with a clear timestamp

Each update goes live with a "last updated" time, plus a plain explanation of where the prices come from, so visitors know how fresh and how reliable the numbers are.

What I learned building it

  • The hard part isn't fetching the page. It's trusting the number. Most of the work went into matching products correctly and refusing to show prices the bot isn't sure about.
  • Leaving data out is better than showing wrong data. A missing row is annoying. A wrong price sends someone to the wrong shop.
  • Timestamps build trust. Showing each shop's own update time tells visitors more than any claim of accuracy.
  • Remind people to confirm. Buyback offers are made after the shop inspects your phone or tests your gold, so both sites tell visitors to confirm with the shop before they go.

Why this matters for your business

Almost every business has a version of my morning price check: a report someone builds by hand, data copied between systems, or a website someone has to update every day. At Novatise we build these kinds of bots and automations for clients, using the same habits: read from the source, check the numbers, and show people clearly where the data came from.

Have a task you still do by hand every day? Tell us about it at novatise.com and we can usually show you a working prototype within 24 to 48 hours.

Related field notes

← All Field Notes