Soy milk (unsweetened) vs Whole milk

The short answer

The closest plant milk to dairy on protein. Soy milk nearly matches cow’s milk gram-for-gram on protein, with no lactose and less saturated fat. Cow’s milk brings naturally more calcium and B12 (soy milk is usually fortified to match). Soy milk for a dairy-free protein swap, cow’s milk for the whole-food original.

Soy milk (unsweetened) and Whole milk, per 100 g and per portion. A gap means USDA has no value for it — not zero.

Soy milk (unsweetened) · per 100 gWhole milk · per 100 g
Calories3361
Protein2.9 g3.2 g
Fat1.6 g3.3 g
Carbs1.7 g4.8 g
Fiber0.5 g0 g
Sugars0.4 g5.1 g
Sodium37 mg43 mg
Vitamins & minerals — where both carry data
Calcium124 mg113 mg
Folateno data5 µg
Iron0.5 mg0 mg
Magnesium16 mg10 mg
Niacin0.2 mg0.1 mg
Phosphorus32 mg84 mg
Potassium120 mg132 mg
Riboflavin0.2 mg0.2 mg
Thiamin0.2 mg0 mg
Vitamin Ano data46 µg
Vitamin B121.1 µg0.5 µg
Vitamin B60 mg0 mg
Vitamin C0 mg0 mg
Vitamin D1.2 µg1.3 µg
Vitamin Eno data0.1 mg
Vitamin Kno data0.3 µg
Zincno data0.4 mg
At equal calories (per 100 kcal)
ProteinSoy milk (unsweetened): 8.7 g, Whole milk: 5.2 g · FiberSoy milk (unsweetened): 1.5 g, Whole milk: 0 g · SodiumSoy milk (unsweetened): 112.1 mg, Whole milk: 70.5 mg

Generic USDA foods (not brands), so both carry micronutrients. Numbers are per 100 g unless the portion toggle is on. USDA FoodData Central, as of 2026-08-12.

Common questions
Is Soy milk (unsweetened) or Whole milk better?

Neither is “better” on its own — it depends what you want from it. The table shows where each is higher; the short answer says when each one fits. Compare on the same basis (per 100 g) and pick for your dish and your goal.

How were these numbers worked out?

Straight from USDA FoodData Central for the generic form of each food, per 100 g. We show the portion view too, but portion sizes differ between foods, so per 100 g is the fair comparison.

Why does one column say “no data”?

Because USDA has no value for that nutrient in that food — so we leave it blank rather than print a 0 that would read as “none”. A real zero from USDA still shows as 0.

More in Dairy & eggs