Scoring Methodology

The in-depth version of How We Score: the units, conversions and equations behind every Puglib score, so the method can be checked against the science it rests on.

Methodology version 2 · Last updated:

In short: each food is scored from its label. Nutrients are converted to a dry matter and a per-calorie basis so foods of different moisture and energy compare fairly. Protein quality is measured with a DIAAS-type amino acid score against the National Research Council (2006) canine requirements, combined with protein quantity into usable protein per 1000 kcal, and compared with the requirement for the dog's life stage. Fat is gated on the AAFCO minimums and credited for omega-3s. The protein and fat axes form the Puglib score (0 to 10). Per dog, foods are filtered on life stage, size, protein avoidances and large breed growth, then ordered by score with a small, capped adjustment for activity.

What this page leaves out, on purpose: the relative weights of the score's parts, the calibration constants of its curves, and our ingredient and processing tables. Publishing them would let a formula be tuned to our score instead of to the dog. Everything else is here.

1. Data: what we read from a label

Every input comes from the brand's own public US product page or packaging:

Ingredients are matched to USDA FoodData Central records for their amino acid composition. Every match is reviewed by hand, and the record used for each ingredient is pinned so a score is reproducible.

2. As fed and dry matter

A label states nutrients as fed, including the water in the food. Requirements are stated on a dry matter (DM) basis, so every comparison converts first:

nutrient_DM (%) = nutrient_as_fed (%) / (1 − moisture (%) / 100)

Example: 26% protein at 10% moisture is 26 / 0.90 = 28.9% protein on a dry matter basis. When a label gives no moisture, a typical dry food moisture is assumed. A few brands publish typical analyses already on a dry matter basis; those are used as published, without a second conversion.

3. Metabolizable energy (ME)

ME is the energy a dog can actually use, in kcal per kg of food. We take it in this order of preference:

  1. The ME the label states, in kcal/kg.
  2. The label's kcal per cup, divided by the grams per cup implied by the brand's own feeding chart.
  3. Only when neither exists, an estimate with the modified Atwater factors used for pet food:
ME (kcal/kg) ≈ 10 × (3.5 × CP + 8.5 × Fat + 3.5 × NFE) NFE = 100 − CP − Fat − Fiber − Ash − Moisture (all in % as fed)

CP is crude protein and NFE the nitrogen-free extract (mostly starch and sugars). When ash is not on the label, a typical value for dry food is used. Because a guaranteed analysis states protein and fat as minimums, this estimate runs systematically low; it is corrected against foods whose ME is declared, and every score records which of the three sources its ME came from. A declared value always wins.

On a dry matter basis:

ME_DM = ME_as_fed / (1 − moisture / 100)

4. Nutrients per 1000 kcal and AAFCO energy correction

A dog eats to meet its energy need, so how much of a nutrient it gets depends on the food's energy density, not on the percentage alone. Requirements are therefore compared per 1000 kcal:

g per 1000 kcal = (g per 100 g of food) × 10000 / ME (kcal/kg)

The AAFCO nutrient profiles are stated for a food of 4000 kcal ME per kg of dry matter. For an energy-dense food the minimums rise in proportion, as the profiles' own footnote requires:

applicable minimum = profile minimum × max(1, ME_DM / 4000)

5. Protein quality: a DIAAS-type amino acid score

DIAAS, the Digestible Indispensable Amino Acid Score defined by the FAO (2013), rates a protein by its most limiting indispensable amino acid. We apply the same structure with canine reference patterns:

C_i = AA_i × 1000 / P (mg amino acid i per g of protein) D_i = SID_i × C_i (the digestible part) R_i = D_i / Req_i × 100 (% of the dog's requirement for amino acid i) DIAAS = min over i of R_i (the most limiting amino acid sets the score)

6. From ingredients to a food's protein quality

A food's protein comes mostly from its first ingredients. Its quality score is a weighted average over the leading part of the ingredient list:

Q = Σ_k w_k × DIAAS_k with Σ_k w_k = 1, w_1 ≥ w_2 ≥ …

7. Usable protein and the protein axis

Quality and quantity combine into usable protein: the grams of protein that meet a dog's amino acid needs.

U = CP (%) × Q / 100 (g usable protein per 100 g) U_1000 = U × 10000 / ME (kcal/kg) (g usable protein per 1000 kcal)

That is compared with the protein requirement for the dog's life stage, from the same NRC (2006) tables:

r = U_1000 / Req_stage Req_stage (g crude protein per 1000 kcal): adult ≈ 20, early growth ≈ 45

Measuring an adequacy ratio rather than a raw score matters: the growth amino acid pattern is less demanding than the adult one while the growth protein requirement is higher, and dividing by the requirement cancels that out, so puppy foods aren't flattered by their yardstick. The protein axis maps the ratio onto 0 to 10 with a saturating curve:

S(r) = 10 × r^k / (r^k + h^k)

h is the ratio that scores 5 and k sets how sharply the curve separates foods around it. Both are calibrated on the foods actually on the market: no complete diet sits near the bare requirement, so a curve centered on the requirement would rate every food the same. Seniors use the adult requirement, because AAFCO has no separate senior profile.

8. The fat axis

The fat axis has a base and a bonus.

Base: two thresholds from the food's own AAFCO profile, on a dry matter, energy-corrected basis (section 4):

Bonus: credit for disclosed omega-3s, long-chain (EPA + DHA) and alpha-linolenic acid. Credit starts only above a level where the nutrient does something, and saturates smoothly:

t = clamp( (ln x − ln floor) / (ln full − ln floor), 0, 1 ) bonus = 3t² − 2t³

x is the stated amount on a dry matter basis. The curve is exactly zero at the floor and flat at the top, so neither edge is a cliff, and it works in log space because concentrations vary by multiples. A label that prints only the legal trace earns nothing. Long-chain omega-3s count for more in puppies (the AAFCO growth profile recommends a minimum) and in seniors, where the evidence for fish oils is strongest.

9. AAFCO adequacy: what a label can prove

A guaranteed analysis states minimums for most nutrients and maximums for a few. A minimum is a lower bound on what is in the food, never the actual amount, so each comparison can only be decided one way:

Label statesAgainst AAFCOWhat it proves
a minimum at or above the AAFCO minimumminimumProven compliant
a minimum below the AAFCO minimumminimumNot proven either way (the real amount may be higher)
a value above the AAFCO maximummaximumProven to exceed it
a value at or below the AAFCO maximummaximumNot proven either way

So a food is never called deficient on a minimum it doesn't print; it just doesn't earn the claim. The brand's own adequacy statement is read as an independent cross check: when a label excludes the growth of large breed dogs, its stated calcium should sit near the AAFCO large-breed growth cap (1.8% DM), and where it doesn't, the statement is trusted over the bare number.

10. Calcium and phosphorus

Ca:P = calcium_DM / phosphorus_DM recommended band (AAFCO): 1:1 to 2:1

The ratio is judged for the dog's life stage and shown on each card. It isn't part of the score, since almost every complete food lands inside the band, but you can filter on it. For a puppy that will grow into a large or extra large dog, a food whose label excludes large breed growth is removed outright (section 12), because excess calcium during growth harms developing joints.

11. The Puglib score and bones

The protein axis and the fat axis are combined into one score from 0 to 10, with protein leading. A food missing either axis (no crude protein or no crude fat on its label) is left unscored rather than scored on half the evidence. The score is calculated per life stage and is the same for every dog of that stage.

Puglib scoreBonesRating
8.0 and up4Excellent
6.5 to 7.93Great
5.0 to 6.42Good
below 5.01Fair

12. Matching a food to a dog

These rules remove a food from a dog's list. Each is pass or fail; none changes a score.

13. Feeding amount and how long a bag lasts

The daily amount on each card is the brand's own published figure, never our calculation. We read the brand's feeding chart in the column for the dog (activity level, adult maintenance, or a puppy's expected adult size) and interpolate linearly on body weight between the chart's listed weights:

amount(W) = a_1 + (a_2 − a_1) × (W − W_1) / (W_2 − W_1) for a weight W between chart weights W_1 and W_2

A dog outside the chart's range gets no amount rather than an extrapolated one. From the amount:

days a bag lasts = bag size (g) / daily amount (g)

Cups are shown only when the brand publishes cups, because a cup's weight depends on the kibble.

14. Activity: energy need and the activity match

A dog's daily energy need follows the standard resting energy equation, scaled for activity:

RER (kcal/day) = 70 × BW^0.75 (BW: body weight in kg) MER (kcal/day) = RER × f(activity, life stage)

f rises from inactive to working dogs and is a little lower for seniors. MER is used for the protein check below and to judge a food's energy profile, not to prescribe an amount; the amount on the card stays the brand's.

Three properties of each food describe its energy profile:

energy density = ME_DM (kcal/kg dry matter) fat share = 8.5 × Fat (%) × 10 / ME × 100 (% of calories from fat) protein density = CP (%) × 10000 / ME (g protein per 1000 kcal)

Less active dogs are matched toward lighter foods with a lower fat share; very active dogs toward energy-dense foods with a higher fat share. Each card's Energy Match and Fat Match (0 to 10) measure how close the food is to the profile the dog's activity points to, falling off smoothly with distance.

Protein density is never matched downward. A dog's protein requirement scales with its metabolic body size, not its calories, so every food is checked to supply enough protein at the calories the dog will eat:

(MER / 1000) × protein density ≥ 3.28 × BW^0.75 (g crude protein per day; 3.28 is the NRC 2006 adult allowance)

The match orders foods; it never changes a score or bones and never removes a food. The ranking adds a small adjustment to the score, zero for a dog of everyday activity, growing toward either end of the activity scale, and capped, so it reorders foods of similar quality without overturning the score. Puppies get a reduced adjustment, because growth, not activity, sets their needs.

15. Limits and safeguards

References

  1. Templeman, J. R., & Shoveller, A. K. (2022). Digestible indispensable amino acid scores of animal and plant ingredients potentially used in dog diet formulation: how this protein quality metric is affected by ingredient characteristics and reference amino acid profile. Journal of Animal Science, 100(11), skac279.
  2. Bailey, H. M., & Stein, H. H. (2019). Can the digestible indispensable amino acid score methodology decrease protein malnutrition? Animal Frontiers, 9(4).
  3. AAFCO. Methods for Substantiating Nutritional Adequacy of Dog and Cat Foods, including the AAFCO Dog and Cat Food Nutrient Profiles. Model Bills and Regulations Agenda, Midyear 2015, Attachment A.
  4. Wang, X., & Parsons, C. M. (1998). Effect of raw material source, processing systems, and processing temperatures on amino acid digestibility of meat and bone meals. Poultry Science, 77, 834–841.
  5. Bauer, J. E. (2011). Therapeutic use of fish oils in companion animals. Journal of the American Veterinary Medical Association, 239(11), 1441.
  6. U.S. Department of Agriculture, Agricultural Research Service. USDA FoodData Central.

Back to How We Score · Frequently asked questions · Compare foods for your dog