Selling cosmetics online: INCI, sizes and batch numbers
A cosmetic product sells with its label. Online, that label has to become queryable, translated, exportable fields, without the INCI nomenclature ever being altered.
The label becomes a data structure
Regulation (EC) No 1223/2009 on cosmetic products requires, in its Article 19, a set of particulars on the labelling: the name and address of the responsible person, the nominal content, the date of minimum durability or the period after opening shown by the PAO symbol, particular precautions for use, the batch number, the function of the product and the list of ingredients in INCI nomenclature.
In distance selling the buyer must be able to consult this information before purchase. The consequence for the shop is immediate: these are distinct product fields, translated language by language, not a photograph of a label. An image reads poorly on mobile, cannot be searched, cannot be indexed and exports to no feed. On a perfumery or soap catalogue that moves with reformulations, it also becomes impossible to maintain.
Requests I get from cosmetics brands and artisan soap makers very often turn on exactly this: taking over a catalogue where regulated information sits inside images or a free-text description.
INCI is not translated, and that is a tooling problem
The INCI list is a standardised nomenclature, written in descending order of concentration, identical across every language of the site. It must stay strictly the same in French, English and Turkish. That requirement collides head-on with two very common mechanisms.
The first is machine translation: applied without a field exclusion it turns Aqua into water, mangles Latin names and leaves the list unusable. The second is CSV import: an ingredient list carries a comma after every term, often brackets and sometimes asterisks marking organic origin. A badly escaped file shifts the columns and lands half the ingredients in the next field. So I lock the INCI field upstream, on both the translation and the import side.
Constraints that rarely show up in a mockup
- Multiple sizes, 30, 50 or 100 ml, require a unit price calculated per combination rather than per product.
- A price per litre or per kilo set on the whole page becomes wrong the moment two formats coexist.
- The batch number printed on the tube has no equivalent in the platforms: no order line carries it without development.
- Without that link, a batch withdrawal means handling every buyer of a reference instead of only those affected.
- Perfumes and aerosols contain alcohol or a propellant gas and fall under dangerous goods transport rules.
- Some destinations, air freight and sometimes pickup-point delivery are excluded for those items: the rule belongs in the carrier calculation, product by product.
- Free samples and miniatures create a zero-price line that must still reduce stock, appear on the picking slip and stay out of revenue.
How I rework a cosmetics catalogue
-
I pull regulated information out of the images
Each Article 19 particular becomes a dedicated field: responsible person, nominal content, PAO or durability date, precautions, function, ingredients. The page shows them before the add-to-basket, and an export to a feed or marketplace carries them as they are rather than a badly sliced description.
-
I shield the INCI field from any transformation
The field is excluded from machine translation routines and copied identically into each language. On import I force the file’s delimiter and escaping, then check after loading that the number of terms matches, which catches a column shift immediately.
-
I compute unit pricing per combination
Size becomes an attribute holding a usable numeric value, and the price per litre or kilo is derived from it for each combination. A price change on one format then leaves no stale figure on the others.
-
I carry the batch through to picking
The batch is entered or scanned during picking and attached to the dispatched line. A withdrawal becomes a targeted query rather than a mailing to the whole base, which also changes how an isolated complaint can be investigated.
-
I push transport restrictions down to product level
Items covered by dangerous goods rules are flagged, and that flag filters both the carriers offered and the collection options. The customer never picks a shipping method that picking will have to refuse afterwards.
Multilingual, imports and product pages
-
Multilingual cosmetics store
How a multilingual launch ran on this kind of catalogue, and the trade-offs taken.
-
Multilingual site and international SEO
How I work when a catalogue has to exist in several languages without duplicating its standardised content.
-
Bulk product import via CSV
Separators, escaping, encoding: what breaks an import when fields themselves contain commas.
-
Product page fails to save
Saving that never completes on long pages or pages with many fields: the causes worth examining.
Frequently asked questions
Is a photo of the label enough for ingredients?
Should the INCI list be translated?
How do I show a price per litre across several sizes?
Why do some carriers disappear on a perfume?
How do I find the orders containing a given batch?
Describe your need in one minute
A few targeted questions so I can reply with an estimate rather than another questionnaire.