The 79,047-row ingredient_name_map records how every raw label token was resolved to a canonical INCI name — resolution method and confidence on each row — as one offline, auditable artifact for ML/NLP teams and compliance analysts. No free source or live API ships it. Underneath: 20,435 products, 46,013 canonical INCI names, 382,797 ordered composition links, enriched from EU CosIng; where a source has no value, the column is NULL.
$79 one-time (INCIDB Korea $149) · CSV + Parquet · snapshot 2026.10 — for ML/NLP teams building ingredient-normalisation models and compliance analysts running bulk Annex audits
These two views of the same data differ by an order of magnitude. Publishing only the flattering one would be a lie by omission, so both are here — and a test in the repository fails the build if this page and the corpus ever disagree.
| Column | Share of the 46,013 distinct names | Share of the 382,797 label occurrences |
|---|---|---|
| CosIng match (any) | 12.2% | 85.4% |
functions (CosIng vocabulary) | 12.0% | 84.3% |
cas_number | 9.0% | 78.8% |
chemical_description | 9.5% · 4,322 distinct values | — |
A cosmetic label corpus contains far more distinct strings — botanical variants, multilingual spellings, marketing tokens, one-off blends — than any regulatory inventory lists. That long tail is why the left column is low. The slots on a real label are filled overwhelmingly by the ingredients CosIng does cover, which is why the right column is high. If you are building a scanner or a formulation model, the right column governs what your users see; if you need a chemical reference, the left column is the honest ceiling.
EU fragrance-allergen overlay (Reg. (EU) 2023/1545): 120 names flagged by exact INCI name, label name or CAS for defined substances; 47.3% of products carry at least one (about 2.3% of products list ingredients as unsplit text that the allergen flags do not reach). The US FDA has not yet published its MoCRA fragrance-allergen list, so no US flag exists here.
Ingredients rated 0–5, transcribed from Fulton JE Jr., J Soc Cosmet Chem 1989;40:321–333 (Table I). NULL everywhere the paper does not reach — absence means "not covered", never "safe".
A rule-derived heuristic, not a measured property: C11–C24 fatty acids and their esters, and polysorbates 20/40/60/80, applied only to CosIng-matched ingredients. Basis: DOI 10.3389/fcimb.2020.00112 and DOI 10.1093/femsyr/foaf043.
SELECT
i.inci_name,
i.functions,
i.cas_number,
i.is_common_allergen,
pi.position_index
FROM 'product_ingredients.parquet' pi
JOIN 'ingredients.parquet' i ON pi.ingredient_id = i.ingredient_id
WHERE pi.product_id = 68597
ORDER BY pi.position_index ASC;
-- Real rows from the snapshot; long values elided with … for display.
-- NULL means CosIng has no value — it is never a placeholder.
-- +---------------------+-----------------------------------+------------+--------------------+----------------+
-- | inci_name | functions | cas_number | is_common_allergen | position_index |
-- +---------------------+-----------------------------------+------------+--------------------+----------------+
-- | AQUA | SOLVENT | 7732-18-5 | 0 | 1 |
-- | GLYCERIN | DENATURANT;HAIR CONDITIONING;… | 56-81-5 | 0 | 4 |
-- | ALUMINUM STEARATES | ANTICAKING;SKIN CONDITIONING - … | NULL | 0 | 11 |
-- | LIMONENE | DEODORANT;SOLVENT;PERFUMING | 138-86-3 | 1 | 14 |
-- | GERANIOL | TONIC;PERFUMING | 106-24-1 | 1 | 15 |
-- +---------------------+-----------------------------------+------------+--------------------+----------------+
No third-party mirrors, no scraped enrichment, no hand-typed chemistry. Every source file's URL, download timestamp and SHA-256 is recorded in the build_report.json shipped with the data.
The product corpus: barcodes, brands, the source's own category tags and the raw on-pack ingredient declarations that everything else is derived from. Licensed ODbL; the raw label text ships alongside the parse so you can re-derive it.
The ingredient inventory: functional categories, CAS and EC numbers, chemical descriptions, restrictions, and Annex II–VI membership. Joined on exact canonical name; unmatched names get NULL, not a guess. The Annex II–VI exports also feed regulatory_status: one row per ingredient and list entry, conditions verbatim; absence of a row is not a status, and none of it is legal advice.
Regulation (EC) 1223/2009 as amended by Regulation (EU) 2023/1545 — the single list behind is_common_allergen, recorded per row in allergen_source, with thresholds, transition dates and the match method in fragrance_allergens.
Raw label tokens resolved by an explicit ordered method — exact, cleaned, typo map, percent-stripped, parenthesis-stripped, synonym map, slash variant, split, or unresolved. The method used is shipped per row.
A deliberately small, cited layer: comedogenic ratings transcribed from one published table, and a rule-derived fungal-acne flag with its rule text stored per row in rating_source.
Per-column fill rates, distinct-value counts, match rates and source hashes for this exact snapshot — shipped in the archive so you can check the claims on this page instead of believing them.
The data is open (ODbL). What you pay for is the normalisation, the canonicalisation, the join, the measurement — and instant delivery.
The EU overlay is part of INCIDB Complete. INCIDB Korea adds the South Korea MFDS overlay, a separate parse of a separate legal text, and always ships together with INCIDB Complete from the same edition, because its links join to that edition's ingredient ids.
ingredient_name_mapfragrance_allergens and regulatory_statusbuild_report.json, data dictionary, licencekr_mfds_entries, kr_mfds_substances, kr_mfds_links in CSV and ParquetSecure card checkout via Stripe (card / Apple Pay / Google Pay) with instant download after payment. The purchase covers delivery and the engineering, not exclusive rights to the data — it stays ODbL. Company invoice, a custom slice, or a question first? Open the contact form.
INCIDB Korea links are positive listings by exact CAS number. The notice gives its CAS numbers as examples, so an ingredient without a link has no status in this data, and many Annex 1 entries apply only as limited by a condition or exception written in the entry. Not legal advice.
Two numbers, both published above. CosIng matches 12.2% of the 46,013 distinct canonical names but 85.4% of the 382,797 ingredient occurrences on labels; functions 12.0% / 84.3%; CAS 9.0% / 78.8%. The long tail of distinct names is botanical variants, multilingual spellings and marketing tokens no inventory lists.
By an explicit ordered procedure — entity decode, character strip, whitespace collapse, upper-case, then exact match, cleaned match, typo map, percent stripping, parenthesis stripping, synonym map, slash variant, and concatenation splitting only when both halves match. Tokens that no method resolves are re-split by explicit rules into matched names plus unresolved_residual text; nothing is fuzzy. Anything that fails all of them is recorded as unresolved, never guessed. The method per token ships as the ingredient_name_map table.
One list only: EU Annex III fragrance allergens (Regulation (EC) 1223/2009 as amended by Regulation (EU) 2023/1545), matched by exact INCI name, then by the collective label name the Regulation prescribes, then by CAS number for chemically defined substances only — 120 names flagged, with allergen_source recording the list; 47.3% of products carry at least one (about 2.3% of products list ingredients as unsplit text that the allergen flags do not reach). The US FDA has not yet published its MoCRA fragrance-allergen list, so this dataset carries no US flag.
142 ingredients rated 0–5, transcribed from Table I of Fulton JE Jr., J Soc Cosmet Chem 1989;40:321–333; NULL elsewhere. The fungal-acne flag is a rule-derived heuristic, not a measured property: C11–C24 fatty acids and their esters plus polysorbates 20/40/60/80, applied only to CosIng-matched ingredients, giving 277 flags. Use it as a filter, not as a finding.
Grouped by the functions values actually recorded on each ingredient. Ingredients without a CosIng function, or whose function falls outside the hub vocabulary, have no monograph.
SKIN CONDITIONING, SKIN CONDITIONING - EMOLLIENT, HUMECTANT, SKIN PROTECTING, ANTISTATIC.
SURFACTANT - CLEANSING, SURFACTANT - EMULSIFYING, CLEANSING, EMULSION STABILISING, FOAMING.
PRESERVATIVE, ANTIMICROBIAL, ANTIOXIDANT, CHELATING.
SOLVENT, VISCOSITY CONTROLLING, FILM FORMING, BINDING, BULKING, OPACIFYING.
FRAGRANCE, PERFUMING, COLORANT, HAIR DYEING — where the Annex III flags cluster.
UV FILTER, UV ABSORBER, EXFOLIATING, KERATOLYTIC, ASTRINGENT, DEODORANT.