You cannot compare 24.90 per square metre with 289.00 per pallet until both sit in the same unit, and the conversion needs the pack data, not the pack name. Choose one reference unit per product family, normally the unit your customer buys in, convert every competitor price into it, and store the conversion factors as fields on the product rather than as arithmetic in somebody's head.
In building materials the unit mismatch is not an edge case. It is the normal state of the market. The same paving slab is sold per slab, per square metre, per pallet and per tonne by four merchants within twenty miles of each other, and each of them treats their own unit as the obvious one.
The comparison is only as good as the pack data behind it. Get the slabs-per-pallet figure wrong and every downstream number is wrong in the same direction, quietly, until somebody checks a margin.
The units one product gets sold in
- Per piece: slabs, blocks, boards, fittings
- Per square metre: tiles, cladding, insulation, membrane
- Per linear metre: skirting, trim, pipe, cable trunking
- Per pack, box, bundle or roll
- Per pallet, which is a pack of packs
- Per tonne: aggregates, sand, cement in bulk
- Per cubic metre: timber, ready-mixed concrete, loose fill
- Per bag, which is a weight pretending to be a pack
Every pair of those units needs a conversion factor, and the factor belongs on the product record with a date and a source. Data sheets change. A supplier moving from 40 to 36 slabs per pallet changes your competitive position without anybody changing a price.
A worked conversion, and the trap at the end
Merchant A lists a paving slab pallet at 288.00 net of VAT. The data sheet gives 40 slabs per pallet at 600 by 400 millimetres. One slab covers 0.6 x 0.4 = 0.24 square metres, so the pallet covers 40 x 0.24 = 9.6 square metres, and 288.00 / 9.6 = 30.00 per square metre.
Merchant B lists the same slab at 27.90 per square metre, which reads as 7 percent cheaper. Then come the conditions: minimum order one pallet, 45.00 pallet deposit, 60.00 delivery to a site address. The basket is (27.90 x 9.6) + 45.00 + 60.00 = 267.84 + 105.00 = 372.84, which is 372.84 / 9.6 = 38.84 per square metre. If the deposit is refunded on pallet return, it is 327.84 / 9.6 = 34.15.
So merchant B is between 14 and 29 percent dearer, depending on whether a deposit comes back, after appearing 7 percent cheaper on the headline. That spread is wider than almost any deliberate pricing move in this trade, and it is invisible to anything that compares the two shelf numbers.
Coverage rates: the second hidden unit
Adhesives, renders, screeds, primers and sealants are sold by weight or volume and consumed per square metre at a coverage rate that depends on trowel size, substrate and application. Two bags at an identical price per kilogram are not at an identical price per square metre if their coverage differs.
Coverage belongs on the product record next to the pack weight. Where the manufacturer publishes a range rather than a single figure, store the range and compare on the pessimistic end, because that is closer to what a site actually gets through.
Wastage and rounding change the real price
Nobody buys 22 square metres of tile. A tile sold in 1.44 square metre boxes needs 22 / 1.44 = 15.28 boxes, which is 16 boxes, which is 23.04 square metres. The customer pays for 23.04 and lays 22.
A merchant selling the same tile in 1.00 square metre boxes sells 22, or 23 with a sensible cut allowance. Their effective price per laid square metre is lower without a cent of discount. Box size is a pricing lever that most merchants never treat as one.
Cut wastage sits on top of that. Trade rules of thumb are commonly quoted as a low single-digit percentage for a straight lay and roughly double for diagonal or herringbone patterns. If you have your own offcut and returns data, use that instead of a rule of thumb.
Delivery is part of the price in this trade
On heavy and bulky lines, delivery is often the part of the invoice that varies most between merchants, and it is the part least likely to be captured in a comparison.
- Kerbside delivery versus mechanical offload
- Crane or lorry-mounted forklift offload, usually charged separately
- Timed or booked delivery slots
- Haulage banded by weight, with a step change at each band boundary
- Pallet deposits, refundable or not, plus the cost of returning the pallet
- Minimum order value for free delivery, which quietly sets a basket size
- Remote area and restricted access surcharges
- Restocking fees on returned full packs, which price the customer's estimating error
Record the delivery basis as a field on the competitor price, not as a footnote. Otherwise your comparison mixes delivered and collected prices, and the direction of that error is not consistent from one merchant to the next.
Published price is the ceiling, not the trade price
Most merchants publish a list price and sell to account customers off a discount matrix. The published number is a ceiling. It tells you what a walk-in pays and what the merchant is prepared to say in public.
That is still worth tracking for two reasons. Movement in published prices leads movement in quoted prices, usually by weeks. And your own retail and small-trade customers compare against published numbers, not against a matrix they cannot see.
What it will never tell you is what a competitor quoted a groundworker last Tuesday. Treat the gap between your published price and your average realised price as a separate measurement, and watch it move.
What to store before you compare anything
- Reference unit for the family, chosen once and not renegotiated product by product
- Pack quantity and pack weight, with the date the data sheet was read
- Piece dimensions in millimetres, so area and linear metres are derived rather than typed
- Coverage rate, with its published range where one exists
- Minimum order quantity and the sales increment
- Delivery basis, plus any threshold for free delivery
- VAT treatment, since some merchants publish net and some gross in the same market
- Whether the price is list, trade or promotional, and when a promotion ends
A comparison tool earns its place in this category by holding those as structured fields on the match, PriceRoom included. If they live in a spreadsheet note, the normalisation gets redone by hand every month, and by the third month it has drifted.