Last week I ranked 53 foods by fiber per dollar and the dry goods aisle embarrassed everything else in the store. Several readers asked the obvious follow-up: does the same thing happen with protein? So I built the second spreadsheet. Forty-nine common grocery foods, USDA protein numbers, current prices, one division problem. The result is a full ranking of the cheapest protein sources in the store.
Short answer: the beans repeat, and the gap is still absurd. A dollar of dried pinto beans buys about 98 grams of protein. A dollar of bacon buys 9. That’s the same nutrient at more than ten times the price, and the expensive version is the one everyone photographs on burgers.
How we ran the numbers
Same playbook as the fiber study, because it survived an audit and I’m not messing with it:
- Protein content: grams of protein per 100 grams of each food, from USDA FoodData Central (SR Legacy). Every value in the table was pulled from the USDA dataset directly, then re-checked against a second USDA source before publishing.
- Prices: for the 23 foods that also appeared in the fiber study, we reused the exact prices we audited on July 4, 2026. New items use Bureau of Labor Statistics average prices from May 2026 (eggs, milk, chicken, ground beef, pork, cheese, bacon) and Walmart.com national listings from July 2026 for the rest. BLS averages run higher than Walmart shelf prices, so the meat and dairy rows are, if anything, scored conservatively.
- The math: total grams of protein in the package, divided by the package price. For bone-in items we only counted the edible portion, using USDA refuse data: a raw whole chicken yields about 61 percent edible meat and skin, drumsticks lose 33 percent to bone, and a rotisserie chicken gives up 33 percent to bone and 13 percent to skin if you’re eating the meat.
One basis rule matters enough to spell out. Everything is measured as purchased: raw meat, dry beans, the package in your cart. Cooked chicken shows more protein per 100 grams than raw chicken because roasting drives off water, not because protein appeared from nowhere. Ranking cooked values against raw prices is how these comparisons usually go wrong, so we didn’t.
And no, protein powder isn’t in the table. This site covers food you can eat as food, so supplements of any kind are out of scope. The closest thing on the list is TVP, which is just defatted soy flour in nugget form, and it’s a grocery item, not a scoop.
The full dataset is public. You can download the raw CSV here and check every number yourself.
The full ranking: 49 protein sources by protein per dollar
| Rank | Food | Protein (g per 100g) | Price per 100g | Protein per $1 |
|---|---|---|---|---|
| 1 | Pinto beans (dry) | 21.4 g | $0.22 | 97.9 g |
| 2 | Whole wheat flour | 13.2 g | $0.14 | 96.0 g |
| 3 | Black beans (dry) | 21.6 g | $0.27 | 81.0 g |
| 4 | Brown lentils (dry) | 24.6 g | $0.32 | 77.7 g |
| 5 | Navy beans (dry) | 22.3 g | $0.29 | 75.9 g |
| 6 | Green split peas (dry) | 23.1 g | $0.31 | 73.9 g |
| 7 | Chickpeas (dry) | 20.5 g | $0.36 | 56.7 g |
| 8 | Red lentils (dry) | 23.9 g | $0.43 | 56.0 g |
| 9 | Whole wheat spaghetti | 13.9 g | $0.26 | 53.4 g |
| 10 | Peanut butter | 22.2 g | $0.44 | 50.7 g |
| 11 | Chicken drumsticks (bone-in) | 18.1 g | $0.24 | 50.3 g |
| 12 | White rice (long grain, dry) | 7.1 g | $0.15 | 48.0 g |
| 13 | Spaghetti (regular, dry) | 13.0 g | $0.27 | 47.7 g |
| 14 | Old-fashioned rolled oats | 13.2 g | $0.28 | 46.6 g |
| 15 | Dry roasted peanuts | 24.4 g | $0.61 | 39.8 g |
| 16 | Brown rice (dry) | 7.5 g | $0.21 | 36.6 g |
| 17 | Pearled barley (dry) | 9.9 g | $0.27 | 36.3 g |
| 18 | 100% whole wheat bread | 12.5 g | $0.35 | 35.8 g |
| 19 | Eggs (large) | 12.6 g | $0.37 | 34.4 g |
| 20 | Sunflower seed kernels | 20.8 g | $0.66 | 31.7 g |
| 21 | Canned black beans | 6.0 g | $0.20 | 30.1 g |
| 22 | Mozzarella (low-moisture part-skim) | 23.8 g | $0.79 | 30.1 g |
| 23 | Whole milk | 3.2 g | $0.11 | 29.1 g |
| 24 | Chicken thighs (boneless, skinless) | 19.7 g | $0.71 | 27.7 g |
| 25 | Greek yogurt (plain, nonfat) | 10.2 g | $0.37 | 27.5 g |
| 26 | Rotisserie chicken (whole, cooked) | 28.9 g | $0.58 | 26.7 g |
| 27 | Cottage cheese (4%) | 11.1 g | $0.42 | 26.3 g |
| 28 | Whole chicken (raw) | 18.6 g | $0.45 | 25.3 g |
| 29 | Pork shoulder butt roast (boneless) | 17.4 g | $0.69 | 25.2 g |
| 30 | Chicken breast (boneless, skinless) | 22.5 g | $0.92 | 24.5 g |
| 31 | Canned kidney beans | 5.2 g | $0.22 | 23.4 g |
| 32 | TVP (textured vegetable protein) | 50.0 g | $2.23 | 22.5 g |
| 33 | Canned tuna (chunk light, in water) | 19.4 g | $0.87 | 22.4 g |
| 34 | Pork loin chops (boneless) | 21.6 g | $0.97 | 22.3 g |
| 35 | Canned chickpeas | 4.9 g | $0.22 | 22.0 g |
| 36 | Canned pink salmon | 19.7 g | $0.91 | 21.6 g |
| 37 | Quinoa (dry) | 14.1 g | $0.66 | 21.5 g |
| 38 | Frozen tilapia fillets | 20.1 g | $0.96 | 20.9 g |
| 39 | Frozen green peas | 5.2 g | $0.26 | 20.4 g |
| 40 | Sardines (canned in oil, drained) | 24.6 g | $1.22 | 20.2 g |
| 41 | Cheddar cheese | 22.9 g | $1.25 | 18.2 g |
| 42 | Frozen shelled edamame | 11.2 g | $0.62 | 18.0 g |
| 43 | Ground turkey (93/7) | 18.7 g | $1.20 | 15.6 g |
| 44 | Almonds | 21.2 g | $1.43 | 14.8 g |
| 45 | Tofu (extra firm) | 10.0 g | $0.74 | 13.6 g |
| 46 | Tempeh | 20.3 g | $1.53 | 13.2 g |
| 47 | Ground beef (80/20) | 17.2 g | $1.49 | 11.5 g |
| 48 | Ground beef (93/7) | 20.9 g | $1.90 | 11.0 g |
| 49 | Bacon | 13.7 g | $1.48 | 9.2 g |
Protein per $1 accounts for edible portion on bone-in items, so drumsticks are scored on the meat, not the skeleton.
What the numbers actually say
The beans won again. Six of the top eight foods are dried legumes, same aisle that ran the fiber table. Dried pinto beans take the crown this time at about 98 grams of protein per dollar. One $3.97 four pound bag holds roughly 389 grams of protein, which is almost eight days of the FDA’s 50 gram Daily Value for a few cents more than a single fancy coffee. Whole wheat flour technically ties at 96, but flour is an ingredient, not dinner, so it keeps its asterisk from the fiber study.
Chicken drumsticks are the meat counter’s best-kept secret. At $1.09 per pound in the 5 pound bag, drumsticks deliver about 50 grams of protein per dollar even after we subtracted a third of the weight for bone. That’s double chicken breast, which lands at 24.5 on national average prices. Breast is leaner and easier; drumsticks are half the price for the same nutrient. Your call.
Eggs are the easiest animal protein, not the cheapest. At $2.19 a dozen (May 2026 average, the calmest egg prices in a while), eggs score 34 grams per dollar. Only drumsticks beat them among animal foods without handing you a cutting board and a raw chicken. Milk quietly rides right behind at 29; a $4.22 gallon holds 123 grams of protein, which surprised me enough to check it twice.
Tofu does not have more protein than chicken. This question drives real traffic, so here are the numbers: extra firm tofu has about 10 grams of protein per 100 grams; raw chicken breast has 22.5. Per dollar it’s 13.6 versus 24.5, chicken again. Tofu is fine. It’s just not a protein bargain, and neither is tempeh at 13.2. The cheap plant proteins are beans, lentils, and peanut butter, all of which may also help keep you full between meals.
Dried beats canned by three to one. Dry pinto beans, 98 grams per dollar; canned black beans, 30. Canned still beats every ground meat in the store, so keep the shelf stocked for lazy nights. But the gap is the price of convenience, and it’s steep.
Ground beef is a rough way to buy protein. The bottom three spots are 80/20 ground beef, 93/7 ground beef, and bacon, all between 9 and 12 grams per dollar. Nobody buys bacon for protein, but plenty of people believe a pound of ground beef is the default protein move. At $6.75 a pound, every dollar you hand over buys less protein than the same dollar spent on canned beans, frozen peas, or a box of spaghetti.

The fine print on plant protein
One honest note before you replace your entire cart with pinto beans. Most plant proteins are lower in one or more essential amino acids than meat, eggs, or dairy. That’s the whole “complete protein” thing, and it’s a food-science fact, not a scare. It’s also solved by the oldest trick in the cookbook: pair a legume with a grain across the day, and the amino acids cover each other’s gaps. Beans and rice do it, peanut butter on whole wheat does it, lentil soup with bread does it. We wrote up exactly how the pairing works in our beans and rice complete protein piece.
Also worth saying: ranking low doesn’t make a food bad. Sardines, tempeh, and Greek yogurt bring things to the table that a bag of pinto beans never will. This list answers one question, where each protein dollar goes furthest, and nothing else.

How to actually use this
Don’t build a bean-only menu out of spite. Let the top of the table carry the cheap baseline and buy the rest because you like eating it.
- Anchor the pantry with two bags. Pintos and lentils, about $5.40 total, hold as much protein as six and a half pounds of ground beef that would cost you $43.
- Make drumsticks or a whole bird the default meat. Both land in the top tier of animal foods. If dinner needs to be done already, the rotisserie chicken at 27 grams per dollar still beats raw breast at average prices.
- Keep eggs, milk, and cottage cheese doing quiet work. All three sit in the 26 to 34 range with zero prep drama. If you’re deciding between the tubs, our cottage cheese vs Greek yogurt breakdown settles it.
- Feeding a crowd? We wrote a full playbook on low-cost protein for large families that pairs well with this table.
The whole study comes down to one sentence, and it’s nearly the same sentence as last time: the cheapest protein in America lives in the dry goods aisle at about a quarter per 100 grams, the meat counter’s real bargain is the humble drumstick, and the stuff at the bottom of the list is the stuff the ads are selling. Now you have the receipts, again.