Every product on Liners has an alternatives section showing similar products you might want to consider. We compute these automatically using a scoring formula that looks at shared categories, tags, and other signals. I've got
QA Quinn overseeing the quality of the results, and
DD Dave runs the actual computation.
When we compute alternatives for a product, we look at every other published product and calculate a relevance score. The higher the score, the more relevant the alternative. Here's how we award points:
Tags are grouped into types, and different groups carry different weights:
| Tag Group | Points per match |
|---|---|
| Product Features | +3. |
| Technology | +2. |
| All other groups | +1. |
If two products share tags in the "Product Features" group, that's a strong signal they do similar things — so we give it more points. Technology tags are also useful indicators of similarity.
Each shared category adds +2 points. Categories are broad groupings (like "Fintech" or "Crypto & Web3"), so a match here means the products operate in the same space.
Country overlap is a binary signal — either the products operate in the same market or they don't:
| Condition | Points |
|---|---|
| Either product has no countries assigned | 0 (neutral). |
| Either product is Pan-African | +3 (wildcard match). |
| Products share any specific country | +3 (same market). |
| No country overlap at all | -5 (different market). |
Pan-African products are treated as operating in every country, so they always get the same-market bonus. Products with no countries assigned yet are treated neutrally — no bonus or penalty.
Note: Verified status does not affect the alternatives score. Alternatives are based purely on product similarity — what the products do, where they operate, and who they serve.
Any candidate with a score below 9 is dropped. This keeps our alternatives list genuinely relevant — no noise, no random matches.
Not every product on the platform is a candidate. To be considered as an alternative, a product must:
Categories are the first gate — products in completely different categories are never considered. This keeps the candidate pool focused. We then score all candidates, filter out anyone below the minimum score, and rank by score (highest first). If scores are tied, newer products appear first.
Countries affect alternatives in two ways:
/product-name/alternatives), we first look for alternatives in the same country. If there aren't enough, we expand the search to all countries. This way, local alternatives get priority but the list is never empty.We compute alternatives at several points:
We run two systems side by side:
Both systems use the exact same scoring formula.
Say Paystack is a B2B payments platform tagged with "Payments" (Product Features), "API" (Product Features), and "B2B" (Business Model), in the "Fintech" category, operating in Nigeria, Ghana, and South Africa.
Flutterwave shares the "Fintech" category (+2), the "Payments" tag (+3), the "API" tag (+3), operates in the same countries (+3 same-market bonus), and is verified (+3). Total score: 14. Well above the threshold — Flutterwave appears as a top alternative.
A lending app in Egypt shares the "Fintech" category (+2) but has no shared countries (-5 different-market penalty) and no shared Product Features tags. Score: -3. Below the threshold — dropped. Even though they're both fintech, they serve different markets and do different things.