BowlGrade Search foods

Methodology: how every number here is produced

Database captured

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 662 individual label values across 122 foods and 20 brands, read from 118 source documents on 16 manufacturer domains, plus 32 recall events going back to 2004. 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.

Scope is the United States. AAFCO model regulations, FDA recall records, US label rules and US dollars are what this database describes; European, Canadian and UK labels are governed differently and are not in it.

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.

Today all three collapse into , because the database was captured in a single pass and nothing has been re-checked since. As re-checks begin, capture and check dates will diverge per food and each food page will print its own. "Checked and unchanged" is a claim worth making separately from "captured".

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. Guaranteed analysis vs typical analysis

US labels state guaranteed minimums (protein, fat) and maximums (fibre, moisture) — actual values differ from guarantees. A few brands (notably Hill's Science Diet) 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.

8 of the 122 foods here are on the typical dry-matter basis. Their row labels, their captions and the metadata line at the top of the page all change to say so, and a guaranteed minimum is never plotted on the same axis as a typical value without that label attached.

3. Dry-matter conversion

Moisture ranges from 5% to 82% 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 50% 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 8 foods

The percentage in that food has to be as fed, because the calorie statement on a US label is as fed. Hill's Science Diet 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 8 of the 122 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

Ash is almost never disclosed, so it is assumed: 8% for dry foods and 2.5% for wet and fresh, the industry-standard figures. That assumption is the weakest link in the calculation, which is why every carbohydrate figure on this site carries a tilde and an asterisk, and why both carbohydrate and ash are drawn as hatched segments in the composition strip — hatch means inferred, not measured.

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. 18 of the 122 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.

Unsourced life stages

16 of the 122 records carry a life-stage descriptor with no published AAFCO adequacy 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 all 122 foods, 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 protein guarantee, a fat guarantee, enough of the analysis to estimate carbohydrate, an AAFCO adequacy statement, and an ingredient list. 88 of the 122 foods clear that bar. The other 34 get no number — not a low one.

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. A food we cannot score is set aside on the leaderboard and named on the transparency page, with the specific missing field stated. It is never ranked last.

The five components

Thresholds are the AAFCO Dog Food Nutrient Profiles minimums on a dry-matter basis. A food is judged against the profile its own adequacy statement claims, so an all-life-stages food is held to the higher growth floor rather than the adult one.
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 the manufacturer publishes too little to score, whatever the food may be like. 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. 9 of the 122 foods here publish no guaranteed analysis at all on their public pages — Ollie and We Feed Raw. Across the database 55 individual label values are missing: 5 foods publish no calorie content and 14 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 — guaranteed analysis, calories, ingredients, AAFCO 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 earns affiliate commissions on some outbound links, disclosed on every page they appear (details). Commissions never touch data or verdicts — several of our comparisons favour brands that pay us nothing, and brands with no affiliate programme are covered identically to brands with one. No manufacturer has paid for placement, edited a page, or seen content before publication. If that ever changes, it will be disclosed in the same sentence.

The disclosure block appears above the first affiliate link and nowhere else. On a page with no affiliate link, we say that instead — a disclosure printed where there is nothing to disclose trains readers to skip the one that matters.

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 118 manufacturer documents 32 recall records Captured 2026-07-25 [email protected]