School meal tracker

Loading…

Code, and how to add your district

Filters

Breakfast and lunch against a day's need

How much of a day's fiber, protein, calcium and iron one K-5 breakfast and one lunch give, averaged over the selected districts (each counted once). A tray here is one carton of milk (every school breakfast and lunch must offer milk; the mean of the milks on the menu) plus the menu's other items, pooled, over the rest of the fewest calories a K-5 meal may average: 350 at breakfast, 550 at lunch. At more calories, a tray holds more of everything. The dashed line is a whole day's need, from the National Academies: the RDA (for fiber, the Adequate Intake). Ages 4–8: fiber 25 g, protein 19 g, calcium 1,000 mg, iron 10 mg. Ages 9–13: fiber 31 g (boys; girls 26 g), protein 34 g, calcium 1,300 mg, iron 8 mg. Breakfast and lunch are two of a day's meals, so a bar short of the line isn't a shortfall by itself; one past it is more than a whole day needs. A district with under half its items known for a nutrient is left out of that bar (n). Calcium and iron were first kept on 2026-10-23 and fill in as each menu's items are re-checked. These are menus offered, not what any child took or ate.

At a glance

How often menus met each line, as a share of the weeks with enough data to judge. "All selected districts" averages the districts, each counted once, so a district with more weeks of data doesn't count more. Further down: the same lines week by week, then day by day, and at the bottom, every item. Sugar: the weekly verdict from "Distance to the 2027 rule". Fiber: entrées, per 1,000 calories. Protein: share of calories, within the 10–30% range for ages 4–18. Sodium: today's K-5 limit, and the stricter one from July 2027. Estimates from published menus, not compliance findings.

Distance to the 2027 rule

Weekly mean share of calories from added sugar, across items offered. Dashed line: 10%. From 2027-07-01 US school meals must average under it, and it's also WHO's main limit for free sugars. Dotted line: 5%, WHO's further (conditional) limit and the UK's for ages 2 and up. Free sugars also count sugars in juice; we only see added sugar, so these comparisons are, if anything, lenient. Hollow points: under half the week's items had data, so no verdict.

Ultra-processed: AB 1264 "high amounts" share

Weekly share of items (milk left out) that are high in saturated fat, sodium or added sugar as California's AB 1264 defines it. Districts in other states are held to the same yardstick for comparison; the law doesn't apply to them.

Path to zero: the thick segment is the median weekly share over the last 8 weeks shown. The dashed line runs straight from there to 0% on 2032-07-01, when vendors may no longer offer "ultraprocessed foods of concern" to California schools, and stays at 0% through 2035-07-01, when school meals must exclude them. It assumes every item meeting this test will count; the state defines "of concern" by 2028-06-01.

Fiber per entrée, per 1,000 calories

Weekly mean of each entrée's fiber per 1,000 calories, so small and large entrées compare fairly. Dashed line: 14 g per 1,000 kcal, the density behind FDA's fiber Daily Value for everyone 4 and up (28 g on a 2,000-calorie day). Food at or above it carries its share: if every meal, dinner included, reached it, so would the day. Dotted line: 12.5, WHO's density (2023 guideline), which it scales to children's targets. Entrées without calories are left out.

Protein, % of calories

Weekly share of calories from protein for the menu as a whole: all the protein in the items offered, at 4 calories per gram, over all their calories, as if one tray held one of everything. Dashed lines: 10% and 30%, the National Academies' acceptable range for ages 4–18. It describes a whole day's eating, not one meal. Dotted lines: 13% and 20%, the range Japan sets for its school lunches. For scale: at 550 calories, the fewest a K-5 lunch may average, a lunch at 14% protein holds 19 g, the RDA for a whole day at ages 4–8 (34 g at 9–13). Items without protein or calories are left out.

Sodium per 1,000 calories

Weekly sodium per 1,000 calories of the menu as a whole: all the sodium in the items offered over all their calories, as if one tray held one of everything. A meal's own sodium per calorie is that same ratio over its items, so a per-meal limit compares once divided by the meal's calories. Dashed lines: the US weekly limit for a K-5 meal, now and from 2027-07-01, over the fewest calories a K-5 meal may average (550 at lunch, 350 at breakfast). A menu above a dashed line would put a meal over that limit at any calorie level the rule allows; a menu below it could still be over in a bigger meal. Dotted lines (lunch): Japan's per-lunch salt limits for ages 6–7, 8–9 and 10–11, as sodium (salt ÷ 2.54), over the calories its standard sets for each age (530, 650, 780). A side with more sodium than its whole meal may average (1,110 mg at lunch, 540 at breakfast) is a likely data-entry error and is left out. These are menus offered, not what any child took.

Lunch

Breakfast

Worst offenders

Items with the most added sugar in the filtered range. "Suspect" marks likely data-entry errors (over the meal's calorie maximum, or more sugar calories than calories); they're shown as published. "Estimated" marks a value the district didn't publish, or published wrong, replaced with a sourced one; the footer says which.

Likely unrecorded added sugar

Meets every line

Items in the filtered range that pass every line on this page, as published: under 5% of calories from added sugar and no more than 10 g; under 10% of calories from saturated fat; under 1 mg of sodium per calorie; and at least 14 g of fiber per 1,000 calories. Items missing any of these values, or marked suspect, are left out. These numbers can't tell a whole food from a processed one with the same nutrients, so meeting every line is a floor, not a definition of healthy. Protein isn't part of this test: its range is for a whole day's eating, not one food.

What the lines mean

The high bar: what good school food can look like

The 2025–2030 US Dietary Guidelines put it simply: "eat real food." For children 5 to 10 they say to focus on whole, nutrient-dense foods (protein foods, dairy, vegetables, fruits, healthy fats and whole grains) and that "no amount of added sugars is recommended." They tell teenagers to avoid highly processed foods. The World Health Organization calls minimally processed and unprocessed foods, low in unhealthy fats, free sugars and sodium, "the foundation of any healthy diet," and suggests at least 350 g of fruit and vegetables a day for ages 6–9.

California has offered every student a free breakfast and lunch since 2022–23 (Ed. Code §49501.5), and eight other states now fund free meals for all students too; in Colorado, districts opt in. From December 31, 2027, California school meals may not contain six food dyes, such as Red 40. Foods from the USDA's commodity program are exempt.

By day

Daily chartsDense: best on a bigger screen, or with your phone sideways.

The weekly charts above, one dot per school day's menu, for the same filters. Lines join the days of one week. The US sugar and sodium limits are weekly averages: one day above a line doesn't break the rule, but it pulls the week toward it. Japan's sodium limits are per lunch, so a day compares directly. Hollow dots: added sugar is known for under half of that day's items. Faint lines: the districts you haven't picked below.

Added sugar, % of calories

AB 1264 "high amounts" share

Fiber per entrée, per 1,000 calories

Protein, % of calories

Sodium per 1,000 calories: lunch

Sodium per 1,000 calories: breakfast

Added sugar per item

Each dot is one item offered on one day. Dashed line: 10 g, the most added sugar the Dietary Guidelines 2025–2030 suggest for a whole meal (guidance, not a school-meal rule). For scale, the AHA suggests 25 g or less per day for children 2–18.