Our method
We publish what official texts say, with their date and legal status. We do not give products an overall score.
The sources we use
Only legal texts in force and opinions of public agencies can produce a warning: EU regulations published in the Official Journal, opinions of the Scientific Committee on Consumer Safety (SCCS), EFSA and ANSES, and French ministerial orders. The Commission's information databases (CosIng, Novel Food catalogue, health claims register) help find them and are flagged as such. Other apps, blogs and sellers are never sources.
Every source has a status
A text may be in force, repealed, annulled by a court or still a proposal. An annulled source never produces a warning.
Hazard, risk and exposure are kept apart
A substance that is hazardous at a high dose can be safe at a low concentration. We give the limits set by the texts and the product type concerned: a rinse-off product does not expose like a leave-on cream.
Classified hazards and endocrine disruptors
The harmonised CLP classifications (carcinogenic, mutagenic, toxic for reproduction) and the endocrine disruptor lists (edlists) describe a hazard or an evaluation, not a risk. They are linked to an ingredient name by its exact CAS or EC number. A classification annulled by the EU courts (that of titanium dioxide in powder form, for example) is shown as annulled and produces nothing, even if the consolidated text still includes it.
An “In plain words” part on every page
Each ingredient page starts with an explanation in everyday language: what the ingredient is used for, what the rules say, in which cases a prohibition applies, and the difference between hazard and risk. These sentences are built from the same data as the technical part, never written separately: the functions declared in CosIng with the official definitions of Decision 2006/257/EC (repealed in 2020, cited for information), the annex entries and the classifications.
How a product is linked to its composition
A barcode identifies a trade item, not a formula: a brand can change its formula without changing the barcode (GS1 GTIN Management Standard). Each recorded ingredient list therefore gets a fingerprint, its source, the date of the original record and the dates when we observed it. When the list changes, the old version remains available and the page says what was added or removed. Products are recorded in every country, with their countries of sale: an ingredient prohibited by the EU regulation is flagged “to be checked” only for a product sold in the European Union, the European Economic Area or Switzerland; elsewhere, the rule is cited for information. When a record only has a photo of its list, the photo is transcribed twice by an AI model, in two different batches of photos, then read a third time by text-recognition software on our machines. A name is kept only if both transcriptions give it: a name where they differ is removed, never chosen, and so are unreadable words, so the published list may be incomplete. The list is kept only if at least 80% of its names are recognised, and a prohibited ingredient is flagged “to be checked” only if the third reading finds it too.
How an ingredient is recognised, and how certain the link is
Each printed name is compared with the EU glossary of cosmetic ingredient names, with no fuzzy matching. The method gives the certainty: certain when the name is identical or in our verified translation table (“huile de jojoba”); high when only the spelling differs (spaces, hyphens, slashes, the letters l and I mixed up, as in “Cl 77891” for CI 77891 or “HCI” for HCL, a typo checked one by one), a clarification in brackets is added, or a name cut by a stray comma rebuilds exactly (“Butylphenyl, Methylpropional”); medium when only one of several names separated by “/”, or only the name in brackets, is recognised, or when a list printed without commas splits in only one way into known names. A split that could be made in two ways, or that would cut inside a longer name, is refused. Only certain or high-certainty links can produce a warning. A product labelled under the detergents regulation (“surfactants”, “optical brighteners”) is a cleaning product and is not treated as a cosmetic. Each ingredient is then identified by its CosIng number; a link to Wikidata, PubChem or ECHA is published only when verified, and never for a plant extract, whose CAS number designates the whole plant.
EU product alerts (Safety Gate)
Alerts on cosmetic products published every week by the European Commission (Safety Gate) are shown as published, in English. An alert is attached to a product page only when the barcode is identical, and it stays “to be checked”: it often concerns specific batches. On an ingredient page, an alert is cited when its hazard text names exactly that regulated substance; it concerns one product, not the ingredient in general. Photos and the names of online sellers are not reproduced.
Official recalls in France (RappelConso)
Cosmetic recalls published on RappelConso, the French public product recall site (DGCCRF), are shown as published, in French: product, brand, barcode, batches, reason, risks and what to do. Like a Safety Gate alert, a recall is attached to a product page only when the barcode is identical, and it stays “to be checked” for the batches it lists. Photos and contact details are not reproduced.
Product pages submitted by visitors
A visitor can submit the address of a product page. We read the page once, following the site's robots.txt and bypassing no protection. Name, brand and barcode come from the page's structured data. The ingredient list is located by an AI model and kept only if it appears word for word on the page, so an invented name, or an instruction hidden in the page, is never kept. A product page is added only if the page gives a valid barcode, the list has at least 5 names of which 80% are recognised with certainty, and the site has been checked (its terms allow it, and it is a genuine brand or shop site); a site not yet checked puts the page on hold. If the site's terms forbid reuse, the visitor sees the analysis and nothing is kept. The visitor's IP address is not kept.
US supplement labels (DSLD)
Labels of supplements on the US market recorded by the US National Institutes of Health (Dietary Supplement Label Database, CC0) are included when they carry a valid barcode. For each, we show what French and EU rules would say if the product were sold in France. The daily dose is the amount per serving times the maximum number of servings on the label; without that number, no dose is compared. It is compared with the French maximum (decree of 9 May 2006) and the EFSA safety limit for adults. Only the row naming the nutrient counts: the mass of a salt (“Ferrous Gluconate”) is not the iron it provides. Vitamin A, folate and niacin are not compared, as their US units (RAE, DFE, NE) depend on the form. A plant is linked through an exact Latin name among the database synonyms, and only when there is a single one. The formula sold in Europe under the same name may differ.
How pages are produced
Page texts are produced from the sources by written, tested rules: none is written by artificial intelligence. AI is only used to read, to transcribe a photo of an ingredient list or to locate the list on a product page, and each of these readings is checked as described above. Each calculation is defined once and tested. Anomalies found in the sources are logged, never silently corrected.
What the CosIng inventory covers
The European Commission's CosIng inventory (functions, CAS and EC numbers) could only be read in part: 25,492 records out of 33,656. The regulatory status of each ingredient comes from the annexes of the Regulation, read in full: an ingredient with no function or CAS number on its page is not an unknown ingredient.
What we do not claim
We do not infer a percentage that a brand does not publish. We do not write that a product does not work: we say whether a health claim is authorised, rejected or never assessed. When data is missing, we say so.
Report an error
A brand, a professional or a reader can report an error. We correct it and date the correction.