Groaty

How we rank

In order of importance, these are the only things that decide which shop appears first.

  1. Parameter 1
    Availability

    Offers the shop reports as out of stock are listed after those in stock.

  2. Parameter 2
    Currency

    Prices are shown in the currency the shop quoted and are never converted. Offers in the currency most of the table uses come first; offers in any other currency follow as their own group, because comparing them would take an exchange rate we cannot vouch for.

  3. Parameter 3
    Total landed price

    Item price plus delivery, cheapest first. This is the only price signal used.

  4. Parameter 4
    Whether delivery cost is known

    If a shop does not publish a delivery cost we cannot compute a total, so that offer is placed by its item price - the least it could cost - and the row says delivery is not stated. On an equal price, the offer we can total comes first.

  5. Parameter 5
    Shop name, alphabetically

    Used only to break an exact tie, so the order is stable between page loads.

Does payment affect the ranking?

Payment does not affect ranking. Commission rate is not an input to the sort at any position, including tie-breaks. The sorting code is in packages/core/src/pricing.ts.

No shop can pay for a higher position, and there is no paid placement, sponsored row, or promoted result anywhere on this site. Some of the shops we list pay us nothing; they are sorted by price exactly like the ones that do. What each shop pays us is published on how we make money and on every individual row.

What “total price” means

Item price plus delivery, in the currency the shop quoted, as it published it, inclusive of VAT for consumers. We never convert a price: offers in the currency most of the table uses come first, and offers in another currency follow as their own group, cheapest first among themselves. Where a shop does not state a delivery cost we do not guess: we show “not stated” and we cannot produce a total, so that offer is placed by its item price - the least it could cost - and on an equal price the offer we can total comes first. Delivery costs that depend on your address or basket size are not something a feed can tell us, so treat a total as the best comparison we can make rather than a quotation.

What we do not do

We do not sort by commission, we do not boost shops with better conversion rates, we do not personalise the order - there is no profile of you to personalise it with - and we do not apply any hidden quality score. There is no A/B test running on the sort order.

How to check

The ranking is one function, rankOffers, in packages/core/src/pricing.ts. It takes the offers and returns them ordered. Commission is not one of its inputs, and there is a test that fails if it ever becomes one.