Skip to content

Scoring version: bowlumo-european-evidence-v1.3.1-multilingual-fediaf-no-price

How we calculate the Bowlumo score

Bowlumo evaluates dog food using information available from labels, technical sheets, official websites, specialist stores and data submitted by producers. The score cannot be bought and does not represent a diagnosis, prescription or guarantee of health effects.

Bowlumo Evidence Score

The final score runs from 0 to 100 and is a weighted average with prudent caps. Each component is calculated from verifiable available data; missing data is not invented. Indicative price is shown separately and does not affect the score.

Formula: final score = sum of area scores multiplied by their weight, rounded on a 0-100 scale, then limited by possible caps for sources, missing data, claims and cautions.

Non-clinical nutritional coherence

Assesses availability and plausibility of analytical constituents, kcal, minerals and useful data with a FEDIAF-inspired reading.

25%

Documentable raw material quality

Rewards specificity, percentages, declared protein sources and fats; penalises generic or poorly traceable wording.

25%

Ingredient clarity

Measures how readable, unambiguous and comparable the ingredient list is against similar products.

15%

Label completeness

Assesses presence of ingredients, analytical constituents, kcal, format, life stage, source and supporting materials.

15%

Source reliability

Weights official sources, label materials when present, producers, retailers and marketplaces with different priorities.

15%

Claim safety

Reduces score when text or sources push medical, curative or unsuitable promises for a non-clinical comparator.

5%

Reproducible technical specification

The rules below publish the essential numerical steps for the version shown above. Each component is rounded and clamped between 0 and 100; the final score always uses the lowest applicable cap.

Bowlumo Evidence Score is an editorial index based on available data. It is not scientific certification, an absolute quality test or a laboratory analysis of the product.

finalScore

  • raw = round(0.25 x nutritionDataScore + 0.25 x materialQualityScore + 0.15 x ingredientClarityScore + 0.15 x labelCompletenessScore + 0.15 x sourceReliabilityScore + 0.05 x claimSafetyScore)
  • finalScore = min(raw, ...applicableCaps); weights: transparencyScore=0, priceValueScore=0.
  • componentScore = clamp(round(value), 0, 100); pricePerKg -> displayOnly.

sourceReliabilityScore + transparencyScore

  • sourceType delta: OFFICIAL_BRAND +3; LABEL_IMAGE +0; PRODUCER_UPLOAD +0; RETAILER -10; MARKETPLACE -25; OTHER -15. Una foto prodotto non costituisce prova dell'etichetta.
  • source URLs are normalized and deduplicated; known retailer/marketplace domains override an incorrect OFFICIAL_BRAND declaration before scoring.
  • sourceCount=2 -> +1; sourceCount>=3 -> +3; has(OFFICIAL_BRAND) -> +2; sourceCount=0 -> sourceReliabilityScore<=30.
  • only(MARKETPLACE) -> sourceReliabilityScore<=58; sourceCount=1 + OFFICIAL_BRAND -> <=90; sourceCount=1 + no primary source -> <=76; evidenceConflict -> -18 and <=50.
  • transparencyScore = clamp(18 + sources?15 + sourceCount>=2?5 + official?16:retailer?6 + allDates?7 + ingredients?9 + analytics?8 + kcal?5 + image?5 + label?5 + max(0,(sourceReliabilityScore-70)/4) - conflict?22 - riskMedium?4 - riskHigh?25, 0, 100).

labelCompletenessScore + ingredientClarityScore + materialQualityScore

  • labelCompletenessScore: base=8; brand +5; name +5; formatKnown +7; lifeStageKnown +7; completeStateKnown +7; category +4; ingredients +14; analytics +14; additives +5; kcal +8; package +4; image +5; labelImage +4; sources +6; calciumAndPhosphorus +4.
  • ingredientClarityScore: ingredientsMissing ->20; else base=42; ingredientCount>=10 +8 (>=5 +5); percentages +14; specificAnimal +13; specificFirstIngredients +8; materialForm +4; namedCarbohydrate +3; genericGroup -7/-9; flavouring -3.
  • materialQualityScore: ingredientsMissing ->18; else base=34; specificFirstProtein +16 (specificAnimal elsewhere +10); percentages +12; namedFat +8; namedCarbohydrate +5; materialForm +6; traceability +5; calciumAndPhosphorus +4; omega +3.
  • materialQualityScore deltas: genericAnimalMaterials -16; genericCereals -7; genericFats -10; genericVegetableProteins -9; genericSugars -9; ingredientCount<=3 -4.

nutritionDataScore + claimSafetyScore

  • nutritionDataScore: analyticsMissing -> COMPLEMENTARY?30:22; else base=32; protein +9; fat +9; fiber +7; ash +7; validMoisture(WET?+7:+4); calcium +4; phosphorus +4; omega +3; kcal +10; additives +4; COMPLETE +3; UNKNOWN -8; veterinary -3.
  • plausibilityBonus<=18: 0<protein<=70; 0<fat<=50; 0<=fiber<=25; 0<=ash<=25; DRY moisture<=14; WET moisture>=60; Ca/P 0.8-2 PUPPY or 0.8-2.3 other.
  • nutritionDataScore caps: DRY/WET + 14<moisture<60 -> <=88; declaredFormatMismatch -> <=80.
  • dryMatter bonus: protein>=22 PUPPY or >=18 other -> +5; fat>=8 PUPPY or >=5 other -> +4.
  • claimSafetyScore: base=94; veterinary -8; bannedTerms>0 -> <=45; else riskHIGH -> <=50; else riskMEDIUM -> -14.

finalScore caps

  • sourceCount=0 ->55; only(MARKETPLACE) ->68; noPrimarySource ->82; oneOfficialWithoutLabelOrUpload ->90; evidenceConflict ->55; ingredientsMissing ->60; analyticsMissing -> COMPLEMENTARY?75:68; kcalMissing ->89.
  • format=UNKNOWN ->70; DRY/WET + 14<moisture<60 ->82; DRY + moisture>=60 or WET + moisture<=14 ->72; DRY/WET + completeState=UNKNOWN ->72; materialQualityScore<55 ->78 (<70 ->88); sourceReliabilityScore<50 ->70 (<70 ->84).
  • claimSafetyScore<70 or bannedTerms>0 ->60 (<85 ->84); riskHIGH ->55; riskMEDIUM ->86; veterinary ->86; puppyOrLargeBreed + missing(Ca/P) ->88; labelCompletenessScore<75 ->88; nutritionDataScore<75 ->86.
  • percentageIntegrityIssue -> issue.scoreCap; appliedCap = min(...allApplicableCaps).

ranking scope + order

  • ranking.format in {DRY,WET,SNACK}; one format per ranking; SNACK excluded from main-food rankings.
  • defaultOrder: finalScore desc, score.sourceReliabilityScore desc, product.sourceReliabilityScore desc, pricePerKg asc nullsLast.
  • transparencyOrder: (transparencyScore + labelCompletenessScore + sourceReliabilityScore) desc, then defaultOrder.

What it measures

Non-clinical nutritional coherence, documentable raw material quality, ingredient clarity, label completeness, source reliability and claim safety.

What it does not measure

It does not measure the clinical response of an individual dog, replace a veterinarian, analyse raw materials in a laboratory or guarantee weight loss, cure or prevention.

Missing data

If ingredients, kcal or sources are unavailable, the profile says so and the score remains prudent. Price stays as a separate informational data point.

Dietetic or veterinary products

They are marked with caution: in case of conditions or doubts about the dog's health, veterinary assessment is needed.

Raw material quality

Bowlumo cannot verify the real quality of raw materials in a laboratory. For this reason it evaluates only documentable quality: how specific ingredients are, whether percentages are declared, whether protein and fat sources are readable, whether there are traceability signals and whether generic macro-categories are missing.

Rewarded elements

Declared animal species, percentages, clear protein source, named fats, readable carbohydrates, calcium/phosphorus or omega values when relevant.

Penalised elements

Generic wording such as meat and derivatives, unspecified oils and fats, undefined animal proteins, absent data or overly strong claims.

How we read sources

Official sources

Producer websites, official technical sheets, PDF catalogues and verifiable brand data have priority.

Secondary sources

Specialist pet stores and retailers help integrate price, formats and availability, but carry less weight.

Automatic verification

Duplicate URLs count once; retailer and marketplace domains cannot receive official-source credit.

Marketplaces

They are used only as secondary sources and reduce reliability if not confirmed elsewhere.

Conflicting data

If sources conflict, the profile is flagged and should not be published without review.

What score bands mean

90-100Excellent evidenceVery solid profile: complete data, strong sources, well-declared raw materials and no relevant caution.
80-89Very goodBroad and readable information, with limited gaps or imperfect documentation.
70-79GoodUseful data is available, with room for improvement on sources, raw materials or nutrition values.
60-69AcceptableReadable but incomplete profile, with weaker sources or less clear ingredients.
50-59Needs improvementSeveral missing data points, generic wording or cautions limit comparison.
< 50Insufficient data or issuesInformation is not solid enough for a full assessment.

Editorial independence

Bowlumo scores cannot be bought. Companies can submit data, report errors and request documented corrections, but they cannot buy positive reviews, rankings or awards. Any future monetisation will be declared and separated from the technical score.