40 rows · high to low
Highest protein
Ordered by dry-matter protein, 36.4–64.7% across the rows shown.
Edition updated
Carbohydrate is estimated the standard way — 100 minus protein, fat, fibre, moisture and ash. We use published ash where a label supplies it and a stated working assumption otherwise, so every result carries a tilde. Foods missing any required input are excluded rather than guessed at. How the estimate works.
The order is one number estimated the same way for every row, sorted low to high. It is not a score, not a shortlist and not a recommendation: no row here is endorsed over any other, and a food's position tells you what its label allows us to infer, not whether it suits your dog.
Rows ranked
40
of 190 foods we can estimate it for, from 19 brands
Carbohydrate, dry matter
4.5–27.2%
median 18.2% across the rows shown
Lowest estimate
4.5%
Purina Pro Plan Puppy Chicken & Rice Entrée Classic
No estimate possible
13
foods missing an input, so no estimate was made
What the order does not mean
These are estimates, not label values. A food that publishes less data can appear artificially good or bad on this ranking — which is why the gaps are shown.
No number in the sorted column was published directly. Each figure is nitrogen-free extract computed by difference — carbohydrate ≈ 100 − protein − fat − fibre − moisture − ash — and then converted to a dry-matter basis. Where ash is published, BowlGrade uses it; for the other 40 rows we assume 8% below 50% moisture and 2.5% above it. That is written out in the methodology and every result remains marked est..
That makes this the least certain list here, and it inherits every soft edge in its inputs. Protein and fat are guaranteed minimums while fibre and moisture are guaranteed maximums, so a brand that publishes conservative guarantees produces a high carbohydrate estimate and moves down the table for reasons of labelling policy rather than recipe. Two foods a percentage point apart are not distinguishable by this method: read the ranking as bands, not as positions.
13 of the 203 foods are missing at least one of the four published inputs, so no estimate exists for them and none was invented — those manufacturers are named instead. 21 of the 40 rows share their value with at least one other row, and ties are broken alphabetically, which means the order inside a tie carries no information. The table stops at 40 rows; the other 150 eligible formulas are in the full index.
What the order does not mean: a lower estimate is not a better food, and low-carbohydrate is not a health claim this site will make on a dog's behalf. 14 of the 40 rows here carry a grain-free claim, which is a labelling fact and not a carbohydrate level — the two are tracked separately for that reason. An estimate built on an assumption cannot carry a verdict, which is why the assumption is printed beside it.
40 rows · high to low
Ordered by dry-matter protein, 36.4–64.7% across the rows shown.
40 rows · high to low
Ordered by metabolisable energy per kilogram, 3,760–5,400 kcal/kg across the rows shown.
40 rows · low to high
Ordered by metabolisable energy per kilogram, 741–1,625 kcal/kg across the rows shown.
40 rows · high to low
Ordered by dry-matter fat, 20–31.8% across the rows shown.
Method
Sourcing, dry-matter conversion, the carbohydrate estimate and its ash assumption, and what we refuse to guess.
Edition updated 2026-07-27 Methodology