Plain-language guide · no code required
SEED OILS
Shipped 2026-06-04

"Is there a seed oil in this?" — and our honest take

The Seed Oils module lets a seed-oil-avoidant consumer instantly see whether a product contains one of the industrial seed oils we flag, and what we deliberately don't flag. It's anchored to Tucker Goodrich's "Hateful 8" — the canonical biohacker list of high-PUFA, industrially-refined seed oils — plus the catch-all "vegetable oil" and refined peanut as a +1.

Validated against ~119,000 real food products across two disjoint corpora at 100.0% recall. Below: what we flag, why, what we deliberately don't, and a live tester so you can paste any ingredient label and see exactly what the production module would do.

Test a label — see what we flag

Mirrors the production detect_seed_oils() byte-for-byte

Paste an ingredient list (or copy from a packet in your pantry). The module normalizes whitespace and slashes, then runs longest-keyword-first substring matching with a word-boundary special case for vegetable oil (so plural "vegetable oils (palm)" is correctly skipped). Try the examples below.

A soft cap, not a flat penalty — how the rule actually scores

Seed oils are culturally controversial, but current science (Johns Hopkins 2025, Memorial Sloan Kettering, recent meta-analyses) finds them mixed-to-neutral at normal dietary doses. We respect the avoidant consumer's preference without overstating the science — so the rule is a ceiling, not a deduction:

  • One seed oil present → Processing Score is capped at 80 (Clean max). A product already scoring 65 isn't moved.
  • Two or more seed oils present → cap at 55 (Moderate max). The "blend of canola + soybean + safflower" formulation pattern.
  • Detection drives the filter tag too — anyone avoiding seed oils can sort/filter the catalog by it.
  • Genuinely evidence-backed fat concerns — trans fats, oxidation, hydrogenation — are handled on separate axes with their own evidence floors. Membership ≠ harm.

This keeps us honest: we serve the preference without overstating the science, and we don't punish a tin of tuna in sunflower oil as if it were a hot dog.

What counts as a seed oil — the "Hateful 8" + 1

61 keyword entries in the production set, organized around Tucker Goodrich's 8 canonical industrial seed oils plus refined peanut as a 9th and "vegetable oil" as the US-label catch-all. Each canonical oil includes every label spelling we observed on a 445k-product USDA corpus scan, plus international spellings as insurance for non-US labels.

1. Canola / Rapeseed 2. Corn 3. Cottonseed 4. Soybean 5. Sunflower 6. Safflower 7. Grapeseed 8. Rice bran +1. Peanut (refined) catch-all. "Vegetable oil"
International spellings caught
soya · soyabean · soya bean · colza · groundnut · arachis · maize · coleseed
Variants caught
high-oleic forms · "X shortening" for each root · vegetable shortening / margarine / lard / blend · terminator-aware "vegetable fat" · salad oil · cole seed oil

A "partially hydrogenated soybean oil" hits this set and separately fires the trans-fat axis — membership and evidence are kept on independent tracks.

Three separate questions, three independent tags

Fats get classified on three orthogonal axes — an oil can carry more than one. The UI composes them on read (e.g. "Avoid Concerning Fats" = seed oil OR palm OR tropical).

Seed Oil

The Hateful 8 + refined peanut + vegetable-oil catch-all + refined/hydrogenated/blend variants. High-PUFA, industrial.

Palm-derived

Every palm leaf — palm fruit, palm kernel, and blends. Saturated; handled on its own axis.

Tropical

Palm + coconut — saturated, oxidation-stable. Palm carries both palm and tropical tags.

What's not a seed oil — the deliberate carve-outs

Common mix-ups. These are intentionally excluded with their rationale logged in code, so we never re-litigate them every time someone asks "but what about ___ oil?":

Olive — monounsaturated, traditionally pressed (0 hits on 448 pure-olive products in the harness)
Avocado — mesocarp (flesh), monounsaturated
Coconut — saturated tropical (own tag, separate axis)
Palm fruit — saturated mesocarp, ≠ H8 PUFA concern. Handled via hydrogenation/fractionation markers, not this cap.
Palm kernel — botanically a seed but ~80% saturated; doesn't fit the H8 ω-6 PUFA rationale
Sesame — culinary specialty (Asian cuisine), not industrial RBD
Flax / hemp / chia / perilla / pumpkin — premium "specialty seed" oils, not industrial RBD
Nut oils — almond, walnut, macadamia (specialty)
High-oleic sunflower / safflower are still in the set (label says "sunflower oil") — but high-oleic cultivars are closer to olive in FA profile. We flag based on label spelling, not analysis.
Whole foods — sunflower kernels, peanuts, etc. Only EXTRACTED oils are flagged; nuts/seeds as ingredients are unaffected.

Validation — 100% recall on ~119,000 real products

Measured on two disjoint corpora using an independent ground-truth regex (broader than our keyword set, so it catches anything we'd miss). Truth: label-declared Hateful 8.

119,421
Products tested
100.0%
Recall (both corpora)
99.5%
Precision
61
Keyword entries
CorpusSizeTPFPFNTNRecallPrecision
Cached oil-relevant harness19,4216,52929012,763100.00%99.6%
Fresh USDA shuffle (disjoint)100,00034,861174064,965100.00%99.5%

FPs are ground-truth-regex artifacts on parenthetical lists where the broader regex flags inside a sublist that detect_seed_oils correctly skips — not real over-flags. PR: peak-health/baseline-data-pipeline#211

Look up any oil

Every oil we've classified and which tags it carries.

All oils we've reviewed from the Open Food Facts taxonomy. Search a name to see exactly how it's tagged — or whether it's deliberately not flagged.

OilTagsWhy

Where it's still rough (we'd rather you hear it from us)

  • It's an editorial line, not a hard fact. Open Food Facts has no "seed oil" flag — different sources draw the boundary differently. This is Peak Health's curated call (the "Hateful 8" cluster), maintained by hand.
  • It rides on the ingredient list. If a label hides the oil behind "vegetable oil" with no detail, we tag the generic — but we can't always tell which seed oil it is.
  • High-oleic cultivars are still flagged by label. A high-oleic sunflower is fatty-acid-closer to olive than to a standard RBD sunflower, but the label usually still says "sunflower oil." We tag conservatively and let the avoidant consumer decide. Lab-spec carve-out is a future call.
  • The taxonomy drifts. Open Food Facts is volunteer-edited; new oil entries appear. We re-audit annually and the importer warns on any oil we haven't yet classified.
  • The science may move. Today we treat seed oils as a soft cap, not a flat penalty. If the evidence base shifts harder either direction, the cap level (80 / 55) is what we'd revisit.

Questions or disagreements on where the line sits? → tell Stefan and this page gets better.