Methodology: how every number here is produced
Edition updated
No star ratings. No "best of" opinions dressed as science. BowlGrade publishes label facts, computes standard nutritional conversions, and links every number to its source. Here is exactly how.
1. Where the data comes from
Every nutritional value on this site is captured from the manufacturer's own published label data — product pages, published nutrition documents, or (where noted) the physical label. Each food's page links the exact source. We record the capture date and re-verify on a rolling basis; manufacturers reformulate without notice, so the bag in your hand always outranks our database. Recall data comes from FDA public records (enforcement database, recall notices, RSS) cross-checked against independent recall archives, with a source link on every event.
As it stands that is 1142 individual label values across 203 foods and 31 brands, read from 198 source documents on
27 manufacturer domains, plus
55 recall events going back to 2002. Source links to
manufacturers and to the FDA are ordinary links, not nofollow — a citation you
refuse to pass credit to is a weaker citation, and that is a policy here rather than an
oversight.
The Diet Score and AAFCO collections are United States-specific. The database is primarily US labels, with 1 explicitly marked EU row from Oasy. EU analytical constituents and complete-feed wording are preserved on their own terms: they can support factual nutrient comparisons, but they are never relabelled as US guarantees or counted as AAFCO evidence.
Three dates, not one
Three different dates get collapsed into one on most sites, and the difference between them is exactly what tells you how stale a number is.
Three dates
Captured — the day a value was read off the manufacturer's own page. Checked — the day a human read it again and confirmed nothing had changed. Modified — the day the content of a page actually changed.
The current database edition was modified on . Formula source checks stay separate: 202 rows show and 1 row shows . Each food page and export row prints its own date, so adding one checked product never implies that every older source was re-verified that day.
Licence and reuse
The compilation — the selection of foods, the normalisation, and every derived value computed here — is offered under CC BY 4.0: use it, republish it, build on it, with attribution. The underlying label facts are not ours to license. They belong to the manufacturers who published them, and we make no claim over them.
2. What each published analysis means
US labels state guaranteed minimums (protein, fat) and maximums (fibre, moisture) — actual values differ from guarantees. A few brands instead publish typical nutrient values on a dry-matter basis, which are more informative but not guarantees. We never mix the two silently: every table labels its basis, and typical data is flagged on every page it appears.
1 food uses EU analytical constituents. Those values are declared as fed and can be converted with the same water-removal arithmetic, but they are not US guaranteed minimums or maximums. The page, tables, exports and generated chart label that distinction every time the row appears.
3. Dry-matter conversion
Moisture ranges from 5% to 84% across this database, so as-fed percentages are incomparable across formats. We convert every food that publishes both a nutrient percentage and a moisture figure.
Derived value
DM% = as-fed ÷ (100 − moisture) × 100
A canned food at 8% protein and 78% moisture is 36.4% protein on a dry-matter basis — comparable to a 32% kibble, not a fraction of it. Nothing is invented: when moisture is not published, the dry-matter cell stays empty.
That is the single largest conversion in the database: the same food reads as 11% on the package and 64.7% once the water is taken out. It is also why price per pound tells you almost nothing about a wet or fresh food.
4. Per-1,000-kcal normalisation
Energy basis is the most rigorous comparison — it is how AAFCO itself states nutrient profiles. A dog eats to a calorie requirement, not to a percentage, so grams of protein per 1,000 kcal is the number that survives comparison across a kibble, a can and a frozen patty.
Derived value
g per 1,000 kcal = as-fed% × 10,000 ÷ kcal/kg
Computed wherever the label publishes calorie density, which has been mandatory on US dog food
labels since 2017. The same logic powers our
cost tool:
$ per 1,000 kcal = price ÷ (kg × kcal/kg) × 1,000.
Why this column is blank for 0 foods
The percentage in that food has to be as fed, because the calorie statement on a US label is as fed. publishes a typical dry-matter table and no moisture figure, so there is no arithmetic path back to an as-fed percentage — the one number needed to make the conversion honest is the one the manufacturer does not publish.
Dividing a dry-matter percentage by an as-fed calorie density anyway is the obvious shortcut, and it is wrong in a predictable direction: it counts water that has already been removed. On a dry food at this database's median moisture of 10%, it overstates the result by roughly 11% — about a tenth, always upward, always flattering. So the cell is left hatched on 0 of the 203 foods rather than filled with a number that is quietly a tenth too high.
5. Estimated carbohydrate
Carbohydrate is not required on current US pet food labels, so we estimate it the standard way — nitrogen-free extract, the leftover after everything that is measured is subtracted.
Derived value
carbohydrate ≈ 100 − protein − fat − fibre − moisture − ash
Where a manufacturer publishes ash, we use it. Otherwise it is assumed: 8% for dry foods and 2.5% for wet and fresh, the industry-standard working figures. Carbohydrate remains an estimate by difference either way and always carries a tilde. In the composition strip, carbohydrate is hatched; ash is solid only when the manufacturer published it.
Because the guarantees are minimums and maximums rather than measurements, the estimate inherits their slack: a food that comfortably exceeds its protein minimum has less carbohydrate than this arithmetic suggests. AAFCO's label modernisation will eventually put carbohydrate on labels; we will switch to disclosed values as they roll out and mark the switch on the affected pages.
6. AAFCO statements, quoted verbatim
Every food's nutritional adequacy statement is quoted word-for-word, in a blockquote, because the differences matter: "formulated to meet" means the recipe matches nutrient profiles on paper; "animal feeding tests using AAFCO procedures substantiate" means it was fed to dogs in controlled trials — a stronger evidence level that very few brands actually hold. 28 of the 203 foods here carry the feeding-trial statement. Life-stage scope ("all life stages," "including/excluding growth of large size dogs," "maintenance") is preserved exactly.
The statement itself is never paraphrased, never abbreviated and never rewritten. It does, however, carry weight in the Diet Score: a feeding trial earns 20 points and a formulation claim 12, because one of them involved dogs and the other involved a spreadsheet. That is a judgement, it is the same judgement for every food, and it is written down in section 7 rather than left for you to infer.
EU complete-feed wording is also quoted verbatim where published. It supports the displayed feeding-purpose claim, but it is not silently mapped to either AAFCO wording and earns no AAFCO evidence points.
Unsourced life stages
43 of the 203 records carry a life-stage descriptor with no published AAFCO or other recognised feeding-purpose statement behind it. For those, the descriptor is marketing copy until the manufacturer publishes the statement, so it is never rendered as a suitability claim, never used to build a life-stage list, and never emitted as structured data.
7. The Diet Score, in full
Every food whose manufacturer publishes enough gets a score out of 100 and one of four verdicts. This section is the entire rubric. There is nothing else — no adjustment, no tie-breaker, no editorial thumb on the scale, and no component that is not listed here.
The complaint against star ratings was never that they judge. It was that the rubric is invisible, moves without notice, and cannot be checked against the label in your hand. So this one is fixed, published, applied identically to every eligible US label, and broken into its five parts on every food page — where you can see precisely how many points each choice was worth and reject the ones you disagree with.
What has to be published before we score at all
A US protein guarantee, a fat guarantee, enough of the analysis to estimate carbohydrate, an AAFCO adequacy statement, and an ingredient list. 149 of the 203 foods clear that bar. The other 54 get no number — not a low one. EU analytical constituents can still appear in nutrient-only rankings, but the AAFCO-based Diet Score does not cross regulatory systems.
Why missing data never costs points
Docking a food for what its maker declines to publish would quietly turn a bad website into a bad dinner, and those are different facts. Every food we cannot score is set aside on the leaderboard, with the reason stated. Foods missing published analysis also appear on the transparency page. None is ever ranked last.
The five components
| Component | Points | How it is scored |
|---|---|---|
| Protein | 30 | Zero at the AAFCO floor (18% dry matter adult, 22.5% growth), full marks 16 points above it. The curve plateaus rather than running open-ended: there is no evidence that protein keeps improving a healthy dog's diet without limit, so the highest number in the database is not automatically the best one. |
| Fat | 15 | Zero at the AAFCO floor (5.5% adult, 8.5% growth), full marks 16 points above it. |
| Carbohydrate | 20 | Full marks at or below 20% dry matter, zero at 55% and above. AAFCO sets no minimum carbohydrate requirement for dogs, so a lower share leaves more of the food doing nutritional work. This is the weakest component and the one to argue with: the figure is estimated by difference, not read off a label, and it inherits the assumed-ash figure with it. |
| Evidence | 20 | 20 for animal feeding tests using AAFCO procedures, 12 for formulated to meet. Both are legal standards of adequacy; only one was fed to dogs. |
| Ingredients | 15 | 8 points if the first ingredient is a named animal source, 7 if every animal source in the first five names its species. We do not penalise by-products or meals: "by-products are bad" is a marketing position rather than a regulatory or nutritional one, and adopting it would make this score exactly the sort of opinion-dressed-as-science the rest of this page argues against. Chicken by-product meal names its species and scores the same as chicken. |
The four verdicts
Recommended at 70 and above. Recommended with caveats from 50 to 70. Not recommended below 50. Can't verify when required data is missing. Outside US rubric when a verified non-US label cannot enter the current AAFCO-based score. Neither is a low score. The bands are set from the measured spread of the scored foods, and the bottom one is deliberately narrow: a food carrying a valid AAFCO statement is legally complete and balanced, so "not recommended" is reserved for the bottom of the range and always names the component that put it there.
What the score deliberately leaves out
Recall history. Safety is a property of a manufacturer and a plant, not of a recipe, and averaging the two into one number would hide both. It lives in the recall tracker and on each brand page, separately. Price. This database holds no prices, so cost is never a factor; the cost tool works from numbers you enter. Your dog. The score reads a label. It knows nothing about age, weight, activity, or any medical condition, and a food scoring 90 can still be the wrong food. That conversation belongs with a veterinarian.
8. When data isn't published
Some brands don't publish full label data online. 10 of the 203 foods here publish no nutrient analysis at all on their public pages — Ollie and Purina ONE and We Feed Raw. Across the database 56 individual label values are missing: 8 foods publish no calorie content and 10 publish no ingredient list. The Farmer's Dog publishes no guaranteed analysis and no calorie data on its public pages at all, which is why it has a brand profile here and not a single food.
We show the gap and say whose it is, rather than estimating or copying unverifiable third-party numbers. Every food page carries a four-dot coverage meter — published nutrient analysis, calories, ingredients, and a nutritional-completeness statement — and every empty cell is a hatch that names the manufacturer, not a dash and not a zero. The complete list lives at foods whose makers publish nothing.
Publication transparency is itself a signal, and it feeds the transparency meter on each brand profile, which is stated as a count of foods publishing a full label rather than as an adjective.
9. Feeding math
The feeding calculator uses the standard veterinary estimate and converts to portions with each food's own label calorie statement.
Derived value
RER = 70 × kg^0.75 · MER = RER × activity factor
Outputs are population estimates with ±25% individual variation: starting points, not prescriptions. Nothing on this site is veterinary advice; dogs with medical conditions need a veterinarian, not a website.
10. Money
BowlGrade currently takes part in no affiliate programme. No outbound link pays us, and no manufacturer has paid for placement, edited a page, or seen content before publication. If that changes, it will be disclosed with the affected link and on the commercial relationships page.
11. Corrections
Found an error or a reformulation we haven't caught? Tell us — the corrections page has the address, what to send, and what happens next. Corrections ship with a dated note on the affected page and an entry in the log. We never silently edit a number: a silent edit is undetectable to a reader, which is precisely why it has to be visible.
Sources 198 manufacturer documents 55 recall records Edition updated 2026-07-27 [email protected]