In our July 2026 US price study of 49 grocery foods, the TVP row led at 52.17 grams of protein per 100 grams. That figure is a proxy, not a USDA match: the manufacturer’s current 12-gram-per-23-gram label works out to 52.17, and USDA FoodData Central publishes no textured vegetable protein record to check it against. Among rows with an exact USDA food-and-form match in our 49-food study, dry brown lentils led at 24.63, followed by canned sardines in oil, drained, at 24.62. This is a bounded grocery comparison, not a claim about every food sold worldwide.
One thing to get straight before the table. This ranks foods by protein density, not by price. The cheapest-per-dollar question is a different study and we ran that one separately.
| Food | Protein per 100 g | USDA form / status | Price per 100 g | Nutrition source |
|---|---|---|---|---|
| TVP (textured vegetable protein) | 52.17 g | Dry textured defatted soy flour, as sold | $2.226 | Manufacturer label · proxy, no USDA record exists |
| Rotisserie chicken (whole, cooked) | 28.93 g | Meat only, cooked, roasted | $0.585 | FDC 171054 · proxy |
| Brown lentils (dry) | 24.63 g | Raw | $0.317 | FDC 172420 |
| Sardines (canned in oil, drained) | 24.62 g | Canned in oil, drained solids with bone | $1.217 | FDC 175139 |
| Dry roasted peanuts | 24.35 g | Dry-roasted, with salt | $0.612 | FDC 174262 · proxy |
| Red lentils (dry) | 23.91 g | Raw | $0.427 | FDC 174284 |
| Mozzarella (low-moisture part-skim) | 23.75 g | Low-moisture, part-skim | $0.789 | FDC 171244 |
| Green split peas (dry) | 23.12 g | Mature seeds, raw | $0.313 | FDC 172428 |
| Cheddar cheese | 22.87 g | Cheddar | $1.253 | FDC 173414 |
| Chicken breast (boneless, skinless) | 22.5 g | Breast, skinless, boneless, meat only, raw | $0.919 | FDC 171077 |
| Navy beans (dry) | 22.33 g | Mature seeds, raw | $0.294 | FDC 173745 |
| Peanut butter | 22.21 g | Smooth style, with salt | $0.438 | FDC 174266 · proxy |
| Black beans (dry) | 21.6 g | Mature seeds, raw | $0.267 | FDC 173734 |
| Pork loin chops (boneless) | 21.55 g | Top-loin chop, boneless, lean and fat, raw | $0.967 | FDC 167839 |
| Pinto beans (dry) | 21.42 g | Mature seeds, raw | $0.219 | FDC 175199 |
| Almonds | 21.15 g | Almonds | $1.425 | FDC 170567 |
| Ground beef (93/7) | 20.85 g | Raw, 93% lean / 7% fat | $1.899 | FDC 173110 |
| Sunflower seed kernels | 20.78 g | Sunflower seed kernels, dried | $0.656 | FDC 170562 |
| Chickpeas (dry) | 20.47 g | Mature seeds, raw | $0.361 | FDC 173756 |
| Tempeh | 20.29 g | Tempeh | $1.533 | FDC 174272 |
| Frozen tilapia fillets | 20.08 g | Raw | $0.963 | FDC 175176 · proxy |
| Canned pink salmon | 19.68 g | Canned, total can contents | $0.909 | FDC 173690 |
| Chicken thighs (boneless, skinless) | 19.66 g | Thigh, meat only, raw | $0.709 | FDC 173627 |
| Canned tuna (chunk light, in water) | 19.44 g | Canned in water, drained solids | $0.867 | FDC 173709 |
| Ground turkey (93/7) | 18.73 g | Raw, 93% lean / 7% fat | $1.203 | FDC 172850 |
| Whole chicken (raw) | 18.6 g | Meat and skin, raw | $0.449 | FDC 171447 |
| Chicken drumsticks (bone-in) | 18.08 g | Drumstick, meat and skin, raw | $0.241 | FDC 172373 |
| Pork shoulder butt roast (boneless) | 17.42 g | Boston butt blade steak, lean and fat, raw | $0.692 | FDC 167849 · proxy |
| Ground beef (80/20) | 17.17 g | Raw, 80% lean / 20% fat | $1.487 | FDC 174036 |
| Quinoa (dry) | 14.12 g | Uncooked | $0.658 | FDC 168874 |
| Whole wheat spaghetti | 13.87 g | Whole-wheat pasta, dry | $0.26 | FDC 169738 |
| Bacon | 13.66 g | Cured bacon, unprepared | $1.478 | FDC 168277 |
| Whole wheat flour | 13.21 g | Whole-grain flour | $0.138 | FDC 168893 |
| Old-fashioned rolled oats | 13.15 g | Regular or quick oats, dry | $0.282 | FDC 173904 |
| Spaghetti (regular, dry) | 13.04 g | Dry pasta, enriched | $0.273 | FDC 169736 · proxy |
| Eggs (large) | 12.56 g | Whole, raw, fresh | $0.365 | FDC 171287 |
| 100% whole wheat bread | 12.45 g | Whole-wheat, commercially prepared | $0.347 | FDC 172688 |
| Frozen shelled edamame | 11.22 g | Frozen, unprepared | $0.624 | FDC 168410 |
| Cottage cheese (4%) | 11.12 g | Creamed, large or small curd | $0.422 | FDC 172179 |
| Greek yogurt (plain, nonfat) | 10.19 g | Plain, nonfat | $0.37 | FDC 170894 |
| Tofu (extra firm) | 9.98 g | Extra firm, prepared with nigari | $0.736 | FDC 174290 |
| Pearled barley (dry) | 9.91 g | Pearled, raw | $0.273 | FDC 170284 |
| Brown rice (dry) | 7.54 g | Long-grain, raw | $0.206 | FDC 169703 |
| White rice (long grain, dry) | 7.13 g | Long-grain, regular, raw | $0.149 | FDC 168877 · proxy |
| Canned black beans | 6.03 g | Mature seeds, canned | $0.2 | FDC 175188 · proxy |
| Canned kidney beans | 5.22 g | All types, mature seeds, canned | $0.223 | FDC 173741 |
| Frozen green peas | 5.22 g | Frozen, unprepared | $0.256 | FDC 170016 |
| Canned chickpeas | 4.92 g | Mature seeds, canned, solids and liquids | $0.223 | FDC 175206 · proxy |
| Whole milk | 3.15 g | Whole, 3.25% milkfat, with added vitamin D | $0.108 | FDC 171265 |
Provenance checked July 30, 2026: 39 rows have an exact USDA FoodData Central food-and-form match and 10 use a proxy with the mismatch disclosed. No rows remain unresolved. The 49-row raw CSV contains the official description, record URL, form, status, and row-specific note. See the full /methodology/.
Which food led protein per 100 grams in our 49-food study?
The TVP row led our July 2026 comparison at 52.17 grams, with an asterisk that is worth reading. The current Bob’s Red Mill page lists 12 grams in a 23 gram serving, which is 52.17 grams per 100 grams, and that label is now the row’s source. USDA FoodData Central publishes no textured vegetable protein record at all, so there is nothing to cross-check it against and the table marks the row a proxy rather than an exact match.
The 28.93-gram rotisserie row is also labeled as a proxy because its USDA record covers roasted chicken meat only, while a whole bird supplied the price and edible-yield math. Among exact food-and-form matches in our 49-food study, dry brown lentils led at 24.63 grams and drained canned sardines followed at 24.62. The next entries cluster tightly, and the gap between raw chicken breast and dry black beans is about one gram.
Why do eggs rank so low on protein per 100 grams?
Because eggs are mostly water. At 12.56 grams per 100 grams they sit 36th out of the 49 foods in our July 2026 study, below old-fashioned rolled oats at 13.15 and whole wheat flour at 13.21.
That number surprises people who’ve been told eggs are the gold standard. Both things are true at once. Eggs aren’t dense, but the protein they do carry is complete, and a large egg at roughly 50 grams delivers about 6.3 grams for very little effort. We did the whole egg ladder in how much protein is in two eggs, and where they land on cost is in are eggs the cheapest protein.
Greek yogurt at 10.19 and cottage cheese at 11.12 are in the same boat. Wet foods look weak on a per-100-gram chart. That doesn’t make them bad buys, it makes the chart a partial picture.
Are the dried beans getting an unfair advantage?
Partly, and you deserve to know how. The form column now reports the form in the linked USDA nutrition record, not merely the wording on the priced package. “Exact” means food, state, and displayed nutrient value match that record. “Proxy” means the source is identified but its cut, brand, or price form differs from the priced package, and the CSV says how. “Not resolved” means we found either multiple plausible records or no official value that matched, so we did not choose an ID. No row in this table currently carries that status.
So when brown lentils beat chicken breast, that’s 100 grams of dry lentils against 100 grams of raw chicken. Cook the lentils and they take on water, and the protein per 100 grams of the finished pot drops a long way. Cook the chicken and it loses water and climbs. Our dataset doesn’t include cooked yields, so we’re not going to invent them.
What survives the caveat is the shopping math. A 16 ounce bag of brown lentils is 454 grams, which is about 111.8 grams of protein for $1.44. That’s the number that shows up on your receipt, and it doesn’t care what happens in the pot. Lentil curry is where a bag like that usually ends up in my kitchen.
Which foods combined protein density and low price in this study?
Dry pinto beans led our 49-food value ranking at 97.9 grams of protein per dollar, with whole wheat flour close behind at 96.0. Dry black beans returned 81.0, dry brown lentils 77.7, and dry navy beans 75.9. That puts four dry legumes in the study’s top five for value.
Meanwhile cheddar sits high on density at 22.87 grams and returns just 18.2 grams per dollar, because it costs $1.25 per 100 grams. Sardines are dense and pricey. Almonds at 21.15 grams per 100 grams return 14.8 per dollar, which is one of the worst deals in the set.
In this study, the clearest density-and-value overlap is dry legumes, dry roasted peanuts, and peanut butter at 22.21 grams per 100 grams. The full plant-side list is in the cheapest plant protein ranking, and the shopping version of all of it lives in our high protein on a budget guide.
Why this 49-food study does not rank servings
Depends who’s defining the serving, which is exactly why per-serving charts are so easy to game. A 100 gram portion of dry brown lentils is about 24.6 grams of protein, roughly 49 percent of the FDA’s 50 gram Daily Value, for 32 cents. Two large eggs at the same 100 grams give 12.6.
Nobody eats 100 grams of dry lentils at a sitting without cooking them into something, and nobody eats 100 grams of cheddar unless the night has gone sideways. Use the density column to know what you’re buying and the portion sizes you actually cook to know what you’re eating. How many grams a day that should add up to is a separate question, covered in how much protein do you need per day.




