Last updated 30 August 2026
A price comparison is only worth as much as the judgement behind it. This page explains exactly how a number gets onto this site, what we do when shops disagree, and where the method breaks down. It is longer than a page like this usually is, deliberately — the interesting decisions are the ones most comparison sites do not show you.
Every hour, an automated job reads the public product pages of the Sri Lankan retailers we track — currently 15 shops across roughly 100 individual product listings. Nothing is entered by hand, and no shop sends us a feed. We read the same pages you would.
Shops are built on different platforms and publish prices in different places, so there is no single way to read them. We maintain eight separate readers: Shopify's product JSON, WooCommerce's embedded variation data, schema.org structured markup in two different shapes, React server-component payloads, in-page product objects, cart forms, and OpenGraph meta tags. Which reader applies to which shop is recorded per listing rather than guessed at runtime.
A price is stored with a timestamp every time it changes, which is what makes the price history charts possible. Note that this history began in August 2026, so for now it is shallow. It deepens on its own.
This is the hard part, and it is most of the value. Shops describe identical hardware in incompatible ways, so before anything can be compared it has to be identified. Some real examples of what has to be handled:
/mac-mini-m4 actually sells the M4 Pro. We map those by the verified product title, not by the URL.Every quirk of this kind is recorded explicitly against the listing it affects. None of it is inferred by pattern-matching at runtime, because a pattern that silently mis-fires produces a confident wrong answer, which is worse than no answer.
Shops report availability three different ways: as a real boolean, as a schema.org token that is sometimes an empty string, or not at all. For one retailer, an “Available colours” heading is the only hint the page gives.
When a shop publishes nothing, we record “unknown” and show a question mark. We never fall back to a cheerful default. Assuming in-stock would make the site look more decisive and would send people to shops that cannot sell them the machine, which is the worst error a site like this can make.
Where a shop's own signals contradict each other, we take the stricter one. One retailer's WooCommerce data reports a product as in stock while its structured markup on the same page correctly declares it a preorder. Taken at face value, that listing would have headlined as the cheapest available machine on the site — for something nobody could buy yet. We read its stock status from the markup instead.
That override is applied per-signal, not per-shop, and for a specific reason: a different retailer's structured markup is wrong about price while being right about stock. So for that listing we take price from one source and availability from the other. There is no single trustworthy source; there is only knowing which part of each page to believe.
Finish is not cosmetic in this market. A shop may stock only one colour of a machine, and its price for that colour can undercut everyone else. So the shop table filters by finish, and picking a different colour genuinely changes which retailer is cheapest.
Shops that publish a single price covering every finish are shown under all of them and tagged “all colours”, so you can tell a colour-specific quote from a general one.
Each machine is ranked on one entry configuration, which is what the “cheapest” comparison is awarded on. For both the MacBook Air M5 and the MacBook Pro M5 that is 16GB / 512GB.
This one is worth showing our working on, because we got it wrong first. Apple's configure-to-order flow for the 14-inch Pro starts at 1TB, which made 1TB look like the base build. But Apple's own technical specifications still list 512GB under standard storage, and 512GB is the configuration Sri Lankan retailers actually lead with. The 1TB build is still tracked and shown — it is simply not the one the cheapest badge is awarded on.
Stated plainly, because a methodology page that only lists strengths is marketing:
If a price, specification or stock status here is wrong, tell us at hello@macpricelk.top and it will be fixed. See About for how the site stays independent, and Terms for the formal position on accuracy.