← All articles
6 min readJune 8, 2026

The Anti-Nutrients Nobody Tells You About

Spinach has 1,145mg of oxalates per 100g. The oxalates bind to the iron and calcium in the spinach. The label tells you about the iron. It doesn't tell you that you're absorbing almost none of it.

Spinach is famous for being full of iron and calcium.

Popeye built his career on it. Generations of children have been told to eat their greens because greens are loaded with the minerals your body needs.

Here's the part the label doesn't tell you. Spinach contains an average of 1,145 mg of oxalates per 100 grams. Oxalates bind to calcium, iron, magnesium, and zinc, the same minerals spinach is supposed to provide. By the time your body has finished processing a serving of spinach, you've absorbed only a fraction of the iron and almost none of the calcium that the nutrition label promised.

The label tells you what's in the food. It doesn't tell you what your body can actually use.

This is the anti-nutrient problem, and it's bigger than spinach.

Plants don't want to be eaten. This is the central fact of plant nutrition that we somehow forgot in popular discussions of food.

Animals can run away from things that want to eat them. Plants can't. So plants have evolved a chemical arsenal of compounds that make them harder to digest, less nutritious to consume, or actively unpleasant to eat. These compounds are designed to discourage being eaten, and they often work by blocking the absorption of the nutrients in the very plant that contains them.

These compounds are called anti-nutrients. They are not poisons. They're not going to kill you in normal dietary amounts. But they significantly reduce how much of the food's listed nutrients you actually absorb. And the nutrition label, by industry convention, only reports what's in the food, not what's bioavailable.

Anti-nutrientFound inWhat it blocks
OxalatesSpinach, chard, beets, almonds, teaCalcium, iron, magnesium, zinc
PhytatesWhole grains, legumes, nuts, seedsIron, zinc, magnesium, calcium
LectinsBeans, peanuts, soy, whole grainsCalcium, iron, phosphorus, zinc
GoitrogensBroccoli, kale, cabbage, brussels sproutsIodine (affects thyroid)
TanninsTea, coffee, wine, legumesIron
SaponinsLegumes, whole grainsGeneral mineral absorption

You're eating these compounds every day. The label tells you about the iron and the calcium. It doesn't tell you that a substantial portion is being blocked from absorption by other things in the same food.

Oxalates are found in spinach, Swiss chard, beets, rhubarb, almonds, sweet potatoes, and tea. They bind to calcium and iron in the gut, preventing absorption. In people prone to kidney stones, they form calcium oxalate crystals, the most common type of kidney stone.

Phytates (phytic acid) are concentrated in the bran of whole grains, in nuts, in seeds, and in legumes. They bind to iron, zinc, magnesium, and calcium. The whole-grain bread that's supposedly full of minerals is also full of phytates that block those minerals from absorption.

Lectins are found in legumes (beans, peanuts, soybeans) and whole grains. They can interfere with the absorption of calcium, iron, phosphorus, and zinc. Some lectins also irritate the intestinal lining when consumed in large quantities; this is why undercooked kidney beans can cause severe digestive distress.

Goitrogens are found in cruciferous vegetables, broccoli, kale, cabbage, Brussels sprouts, cauliflower, mustard greens. They can prevent the absorption of iodine, which is required by the thyroid. In people with iodine deficiency or hypothyroidism, high consumption of raw cruciferous vegetables can worsen thyroid function.

Tannins are in tea, coffee, wine, and legumes. They decrease iron absorption. The standard advice not to drink tea or coffee with iron-containing meals comes from this.

Saponins are in legumes and whole grains. They can interfere with normal nutrient absorption.

Let me show you what this actually means with one food.

Nutrient (per 100g raw spinach)ListedBioavailable
Calcium99 mg~5 mg (5%)
Iron2.7 mg~0.3 mg (10%)
Magnesium79 mgreduced significantly
Oxalates (anti-nutrient)1,145 mg total / 803 mg solublebinds the minerals above

Source: Petroski & Minich, 2020; Curhan et al. studies on calcium absorption. The label tells you what's in the food. It doesn't tell you what your body can use. For spinach, the gap is roughly 10x.

The oxalates outweigh the minerals they're going to bind to by a factor of roughly 11 to 1. This is not a tie. The oxalates win.

When researchers actually measure how much calcium from spinach gets absorbed, the answer is about 5%. So out of 99 mg of calcium in the food, you absorb about 5 mg. For comparison, calcium absorption from milk is roughly 30%. To get the same usable calcium as one glass of milk, you'd need to eat several pounds of spinach.

The iron is slightly less affected, because heme iron and non-heme iron behave differently and because vitamin C in spinach helps with absorption. But you're still absorbing a small fraction of what the label suggests.

This doesn't make spinach bad. Spinach has other things in it, folate, vitamin K, fiber, antioxidants, that are valuable independent of the minerals. But the basic story we tell about spinach, that it's an excellent source of iron and calcium, is at best half-true.

The same pattern repeats across almost every plant food on the planet. Try a few, search by name or category:

Spinach

Leafy greens
  • Iron0.1 mg absorbed of 2.7 mg listed
    ~2% bioavailableblocked by oxalate
  • Calcium5 mg absorbed of 99 mg listed
    ~5% bioavailableblocked by oxalate
  • Magnesium15.8 mg absorbed of 79 mg listed
    ~20% bioavailableblocked by oxalate
  • Zinc0.1 mg absorbed of 0.5 mg listed
    ~15% bioavailable
Anti-nutrients present
Oxalate 970 mg
Per 100 g raw. Bars show roughly what your body absorbs, not what the label promises. Cooking, soaking, fermenting, or pairing with vitamin C shift everything up. Coffee, tea and calcium-rich pairings shift it down. Numbers draw on USDA FoodData Central + Hurrell & Egli 2010 (iron), Heaney & Weaver 1990 (calcium), Sandström 1992 (zinc), Reddy 1989 + Schlemmer 2009 (phytate effects). Treat them as orders of magnitude, not lab-precision.

The good news is that anti-nutrients are not destiny. They can be substantially reduced by how the food is prepared.

MethodAnti-nutrient reduction
Boiling spinach (12 min)87% oxalate reduction
Boiling Swiss chard (12 min)85% oxalate reduction
Soaking grains overnight17–28% phytate reduction
Sprouting legumes60%+ phytate reduction
Fermenting (sourdough, sauerkraut, tempeh)Significant phytate + lectin reduction
Cooking beans thoroughlyLectins deactivated

Source: Lestienne et al. 2005; Duhan et al. 2002; various. Traditional food preparation methods existed for a reason. The "raw is best" movement of the last 20 years has been moving in the wrong direction for mineral absorption.

Boiling spinach for 12 minutes reduces oxalate content by 87%. Swiss chard, similarly, drops 85%. This is one of the few cases where the traditional folk wisdom about cooking vegetables actually has a clear nutritional rationale.

Soaking grains reduces phytate content by 17-28%. This is why traditional preparation of grains, overnight soaking before cooking, wasn't just for taste.

Sprouting legumes reduces phytate content by over 60%. This is why sprouted lentils, mung beans, and similar are easier to digest and more nutritionally available than their unsprouted versions.

Fermenting dramatically reduces both phytates and lectins. Sourdough bread has substantially fewer phytates than regular yeast bread. Tempeh has fewer than unfermented soybeans. Sauerkraut has fewer than raw cabbage.

Cooking in general deactivates lectins. Raw kidney beans contain enough lectins to cause severe poisoning if eaten in quantity; properly cooked kidney beans contain almost none.

The pattern is consistent: traditional preparation methods, soaking, sprouting, fermenting, prolonged cooking, that humans have used for thousands of years are usually doing meaningful anti-nutrient reduction. The "raw is best" food trend of the last twenty years has, in many cases, been moving in the wrong direction.

The nutrition labels you see on packaged food are mandated by regulators. The format is standardized in most countries: calories, fats, carbs, protein, key vitamins, key minerals. In the US, the format is set by the FDA. In the EU, by EFSA. Each format went through years of regulatory negotiation.

None of them include bioavailability adjustments. None of them mention anti-nutrients. None of them tell you the ratio of mineral-blocking compounds to minerals.

This is an obvious gap, and it's a gap with consequences. People making dietary choices based on labels are getting a partial picture. If you're trying to increase your iron intake by eating spinach, you're going to absorb far less iron than the label suggests. If you're choosing whole-grain bread for the magnesium, the phytates are taking back most of it. If you're loading up on raw kale smoothies for the calcium, the goitrogens and oxalates are doing real work against you.

A better label format would show two columns: listed nutrients and bioavailable nutrients. The first column would be the current information. The second would adjust for the anti-nutrients in the food and the cooking method indicated. For raw spinach, the bioavailable calcium would be ~5 mg, not 99 mg. For boiled spinach, more like 50 mg. The consumer would actually know what they're absorbing.

The pushback to this would come from the food industry, which currently markets products on the listed nutrient content. A breakfast cereal "high in iron" might be much less impressive once the phytates are accounted for. A leafy green "rich in calcium" might be in a different class of food entirely. Companies that have built brands on the optimistic version of the label would lose marketing leverage.

This is exactly why the change won't happen voluntarily. It needs to happen through regulation, the way the original nutrition labels did. And it should happen soon, because the gap between what people think they're eating and what their bodies are actually using is large and consequential.

Food labels were a major regulatory achievement of the 20th century. They told consumers what was in their food. They held producers accountable.

They are also out of date. They report what's in the food. They don't report what your body can use. For most foods, the gap is small enough not to matter. For high-anti-nutrient foods, the gap is enormous, sometimes the bioavailable nutrient content is one-fifth to one-tenth of what's listed.

A serving of raw spinach is a celebration of plant chemistry. Most of the iron and calcium are unavailable. The labels don't say this. The nutrition guides don't say this. The cookbooks don't say this. The general cultural narrative around eating leafy greens for minerals doesn't say this.

It's not a conspiracy. It's just the way the regulations were written, in an era when nobody was thinking about absorption.

But we should think about it now. The labels are giving you a picture of the food that is technically true and functionally wrong. A second column, showing bioavailable nutrients adjusted for anti-nutrient content and standard preparation, would close the gap.

Until then, here's the cheat code: boil your spinach. Soak your grains. Sprout your beans. Ferment your cabbage. Drink vitamin C with iron-rich foods. Don't drink coffee or tea with meals when you're eating for minerals.

Or, alternatively, accept that you're getting less than the label promises and just eat a wide variety of foods and stop worrying about it.

Either way, you should at least know.

The conversation

No comments yet. Be the first.
Request a topic