Methodology

How we turn raw nutrition data into transparent, comparable rankings.

Every product on MacroXray is scored and ranked using the same formula. There are no editorial overrides, no manual adjustments, and no special treatment for any brand. This page explains the full system so you can verify any score you see on the site.

1. Data Collection

We source nutrition data and pricing from authorised retail APIs and public product pages. Every product goes through our ETL (Extract, Transform, Load) pipeline which performs the following:

Nutrition values are normalised to per 100 g as the canonical unit. This allows direct comparison between products regardless of serving size. We also compute per-serving values using the manufacturer's stated serving size.

Pricing is collected in the original currency and converted using daily FX rates. Internally we store cost per gram of protein in USD for ranking purposes; in the UI this is flipped to “grams of protein per unit of currency” so every axis on the radar reads “higher is better” consistently. The displayed denomination adapts to your currency — g/$, g/€, g/¥100, g/Rp10,000 — so the number always lands in a comfortable range regardless of where you're shopping from.

2. The Five Dimensions

Each product is measured across five dimensions. Each dimension captures a different aspect of what makes a protein product good.

Protein Efficiency

Metric: Grams of protein per 100 kcal. Direction: Higher is better. This measures how efficiently a product delivers protein relative to its calorie cost. A product with 25 g protein per 100 kcal is twice as efficient as one with 12.5 g per 100 kcal.

Value for Money

Metric: Grams of protein per unit of currency (e.g. 5.88 g/$, 3.79 g/¥100). The displayed denomination adapts to your currency so the number always reads comfortably. Direction: Higher is better. We use the cheapest available variant price and invert the cost-per-gram calculation. This strips away marketing and shows how much protein each unit of your money actually buys.

Leanness

Metric: Protein-to-fat ratio (g protein ÷ g fat per 100 g). Direction: Higher is better. A ratio of 10:1 means you get 10 g of protein for every 1 g of fat. Products with near-zero fat get very high ratios.

Low Carb

Metric: Net carbs per 100 g (total carbs minus fiber). Direction: Lower is better. This matters for keto, low-carb, and carb-conscious consumers. Fiber is subtracted because it doesn't impact blood sugar the same way.

Fiber

Metric: Fiber per 100 g. Direction: Higher is better. Fiber contributes to satiety, gut health, and overall nutrition quality. Most protein products have minimal fiber, so those that include it get a meaningful advantage.

3. Scoring and Visualisation

Raw metrics are not directly comparable across dimensions — grams per 100 kcal and dollars per gram are fundamentally different units. We normalise each dimension in two different ways depending on what we are trying to communicate: one for the overall XRay Score and rankings, one for the Performance Radar chart.

3a. Percentile scoring (drives the XRay Score & ranks)

For the overall XRay Score and every per-dimension rank, we convert each dimension to a percentile score from 0 to 100. A percentile of 85 means the product outperforms 85% of products in its category on that dimension. Percentiles are calculated within each product category — protein bars are compared to protein bars, powders to powders — so a bar with 20 g protein per 100 kcal isn't penalised for not matching a whey isolate powder at 40 g per 100 kcal.

For dimensions where a lower raw value is better (currently Low Carb only), the percentile is inverted so that 100 always means “best in category.” Value for Money is also conceptually “lower cost is better,” but we display and score it as “grams of protein per currency unit” so every axis reads consistently as “higher value is better.”

3b. How the Performance Radar visualises it

The percentile system is great for ranking but weaker as a visual. Every category's median product would always sit at exactly 50% on every axis, so the shape of a pentagon would tell you nothing about where “average” actually is. The Performance Radar uses a different normalisation so that users can see how a product compares to a typical one at a glance.

Each axis is scaled from the category's minimum to its 95th percentile (raw values, not ranks). Dimensions where a lower raw value is better (Low Carb) are inverted so larger area on the chart always means better, regardless of whether the underlying metric is “higher is better” (Protein Efficiency, Value, Leanness, Fiber) or “lower is better” (Low Carb). Behind the product's teal pentagon we overlay a faint gray “ghost” pentagon representing the category-median product — so the chart answers two questions at once: how close is this product to the best in the category, and where does the typical product sit? Hover any axis label to see the raw numbers, the formula, and the scale.

The hover tooltip's scale arrow always points from the pentagon's center toward its edge — toward the “good” direction for that axis. For Protein Efficiency, Value, Leanness, and Fiber, that reads 0 → P95. For Low Carb, the axis is inverted so the scale reads P95 → 0: the center of the pentagon represents the highest (worst) carbs in the category, the edge represents zero carbs. Same principle, flipped numbers, arrow still points the right way.

The P95 ceiling (instead of the category maximum) keeps a single outlier product from stretching the scale unfairly. The median (instead of the mean) keeps the ghost representative of the actual middle product, not pulled up by the long tail of exceptional products.

4. The XRay Score (Weighted Composite)

The XRay Score is a weighted average of all five percentile scores. Protein Efficiency and Value carry the highest weights because they reflect what most consumers care about most: getting the most protein for the fewest calories and the lowest cost.

Weight Distribution

Protein Efficiency30%
Value for Money25%
Leanness20%
Low Carb15%
Fiber10%

The result is a single number from 0 to 100. A score of 78 means the product's weighted combination of all five dimensions outperforms 78% of products in its category. Products are then ranked by this score within their category.

5. Data Freshness and Updates

Rankings are recomputed daily via an automated job. When new products are added or prices change, every product in the affected category is re-ranked. This means percentiles and ranks are always relative to the current state of the database — adding a new high-performing product will shift existing products' percentiles downward.

FX rates are updated daily. Product nutrition data is refreshed when we detect changes at the retail source.

6. Handling Missing Data

Not every product has complete data. When a nutrition value is missing (e.g. fiber not reported), the product receives a null for that dimension and is excluded from that dimension's percentile calculation. It is never penalised or given a zero — we prefer gaps over guesses.

Dietary flags follow the same principle. If we cannot confirm a product is gluten-free, vegan, halal, etc., the flag shows as “unknown” rather than being assumed false. Every data point carries a confidence score in our system, and low-confidence items are flagged for review.

7. What We Don't Do

MacroXray does not factor in taste, texture, mixability, brand reputation, or subjective quality. We rank on published nutrition data and pricing only. We also don't perform lab testing — we rely on the nutrition facts as reported by manufacturers and retailers. If a manufacturer misreports their data, our rankings will reflect that until corrected.

Affiliate relationships have zero influence on rankings. The scoring algorithm has no knowledge of which products have affiliate links. Rankings are computed in a materialized database view that contains only nutrition and price data.

Questions about our methodology? Found an error in a product's data? Please get in touch. You can also learn more about our mission on the About page.