Transparency

Our Methodology

How DrinkNeatly calculates scores, computes similarity, and sources data. Full transparency — no black boxes.

Community Ratings

How ratings are collected

Users rate whiskies 1–5 stars after creating a free account. Ratings are anonymous to other users. Each user can rate each whisky once, but can update their rating at any time. Ratings from accounts created specifically to manipulate scores are periodically removed.

How the community score is calculated

The displayed rating is a simple arithmetic mean of all valid ratings. We display ratings to 2 decimal places for transparency. The community score is shown alongside the review count so users can judge statistical reliability — a 4.8 from 5 people carries less weight than a 4.3 from 800 people.

Bayesian ranking

For sorting and ranking purposes (e.g. 'best of' lists), we use a Bayesian average: (rating × count) / (count + 5). This prevents obscure bottles with one 5-star review from outranking well-loved bottles with hundreds of ratings. The formula is: score = (R × v) / (v + m), where R = average rating, v = ratings count, m = 5 (minimum votes threshold).

Data sources

Community ratings come exclusively from DrinkNeatly users. We do not import ratings from third-party sites, critic scores, or brand-provided data. This ensures the rating reflects real community consensus, not editorial opinion.

Value Score

Definition

The Value Score is a simple metric: community rating divided by price in GBP. Higher = better value per pound spent. Formula: valueScore = (rating / priceGBP) × 1000, capped at 100.

Value Pick badge

A bottle earns a 'Value Pick' badge when its ratio of rating to price is ≥ 0.07 — meaning a community rating of at least 3.5/5 at £50 or 4.0/5 at £57. The threshold was chosen to identify genuinely exceptional value, not just cheap bottles.

Limitations

Value Score only considers community rating and price. It does not account for complexity, ageing, production method, or rarity. A £20 entry-level blend might score higher than a £60 premium single malt even if the single malt is objectively more interesting. Use it as one signal, not the only signal.

Beginner Score

Definition

The Beginner Score (0–100) estimates how approachable a whisky is for someone new to the category. It is computed from: ABV (lower = more approachable), smoke/peat level (lower = more approachable), and presence of approachable flavour tags (Honey, Vanilla, Fresh Fruit add points).

Formula

Starting at 60: subtract up to 25 points for very high ABV (>55%), subtract up to 30 points for heavy peat (smoky score ≥70), add up to 20 points for sweet approachable tags, add 10 points for affordable pricing (≤£40). Result capped 0–100.

Limitations

This is a heuristic based on commonly observed patterns. Some heavily peated whiskies are beloved by beginners who happen to love smoke. The score is a starting point for discovery, not a definitive judgment.

Flavour Vectors

What they are

Every bottle has a 7-dimensional flavour vector: smoky, sweet, fruity, spicy, woody, floral, and peaty — each scored 0–100. These enable 'find something like X but sweeter' queries and power the taste radar visualisation on comparison pages.

How they are computed

Flavour vectors are derived from community tasting tags using a lookup table (TAG_VECTORS in lib/whiskeys.ts). Each of the 34 tasting tags maps to a partial contribution to one or more flavour dimensions. For example, 'Smokey' contributes +20 to smoky and +15 to peaty; 'Honey' contributes +25 to sweet and +10 to floral. The contributions from all of a bottle's tags are summed, averaged, and normalised to 0–100.

Data source

Tasting tags come from community votes (whiskey_tag_votes table) and from scraped tasting note data from Master of Malt. Community votes are weighted more heavily as they accumulate.

Limitations

Flavour vectors are only as good as the tasting tag data. Bottles with few community votes rely more heavily on scraped data, which may not reflect the actual spirit. Vectors are recomputed as new tags accumulate.

Taste Similarity

How similarity is determined

Bottle similarity is computed from tasting tag overlap. For a given bottle, we find all other bottles that share at least one tasting tag, then rank by the count of shared tags (weighted by community vote counts from whiskey_tag_votes). More shared tags = more similar.

Why not vector cosine similarity?

We use tag overlap rather than flavour vector cosine similarity because tag overlap preserves the specificity of the community's language. Two bottles both tagged 'Kippery' and 'Medicinal' are more meaningfully similar than two bottles with similar aggregate 'smoky' scores that might come from completely different flavour profiles.

Future: precomputed similarity graph

We plan to precompute a whiskey_similarity table using cosine similarity over flavour vectors, enabling much faster 'similar to X' queries and more nuanced similarity scoring. This is Phase 5B in our roadmap.

Taste DNA

What it is

Taste DNA is a personal flavour preference vector computed from a user's quiz responses or manual tag selection. It contains weights for each of the 34 tasting tags, reflecting how much a user enjoys each flavour characteristic.

How the match score is computed

For each bottle, we compute a match score (0–100%) by comparing the user's Taste DNA weights against the bottle's tasting tags. Tags the user likes that appear on the bottle add to the score; tags the user dislikes subtract. The score is normalised to 0–100%.

How the quiz works

The quiz presents 3 anchor bottles representing distinct flavour profiles. The user rates each bottle's tasting notes (-1 dislike, 0 neutral, +1 like). These reactions are mapped to flavour tag weights that form the initial Taste DNA. Users can refine by selecting tags directly from a palette of all 34 tags.

Guest Taste DNA

Users who haven't created an account can still build a Taste DNA by selecting tags directly. It is stored in a browser cookie (neatly_guest_palate) and is applied to match scores across the session.

Data Sources & Freshness

Bottle data

Primary data comes from scraping Master of Malt (MoM) and WhiskyBase. Tasting notes, ABV, age, distillery, region, and type are normalised from these sources. AI-enriched descriptions (where present) are generated using GPT-4o and marked with metadata.description_source = 'ai'.

Community data

Ratings, tasting tag votes, and cellar entries are collected directly from DrinkNeatly users and updated in real time.

Pricing

Prices are periodically scraped and may be out of date by days to weeks. Always verify current price at the retailer before purchasing.

Update frequency

Bottle metadata: updated when scrapers run (roughly weekly for new releases, monthly for existing catalogue). Community ratings and tags: real time. Flavour vectors: recomputed when tasting tag data changes. Sitemap: regenerated every 24 hours.

Terminology Policy

Whisky vs whiskey

Both spellings are used intentionally. URL routes use 'whisky' (/whisky/, /best/islay-whisky). The database and API use 'whiskey' for consistency with the most common search term. All pages include both spellings in metadata keywords. This is deliberate SEO coverage, not an inconsistency. In prose, we follow origin convention: 'whisky' for Scotch, Japanese, and Canadian; 'whiskey' for Irish and American.

Type classifications

We use the legal definitions: Single Malt (single distillery, malted barley, pot stills), Blended Scotch (malt + grain from multiple distilleries), Bourbon (≥51% corn, new charred oak, USA), Irish Whiskey (Ireland, ≥3yr), Japanese Whisky (Japan). We do not create custom classifications beyond these.

Questions about our methodology?

See our AI identity page for machine-readable data schema and API documentation, or browse the whisky guide for 1,000+ answered questions.