
How to Detect Niacinamide in Skincare Products Programmatically
To detect niacinamide reliably, normalize each INCI token and resolve it to a canonical ingredient record. Match the label name Niacinamide, known synonyms such as Nicotinamide, and CAS 98-92-0 when a structured identifier is available. Do not treat the broad phrase “vitamin B3” as an exact match without disambiguation.
The important distinction
Niacinamide and nicotinic acid are related vitamin B3 forms, but they are not the same chemical record. A search filter that maps every “B3” mention directly to niacinamide can produce false positives.
Which identifiers represent niacinamide?
Use stable identifiers to connect label text, supplier data, and your ingredient database. The U.S. National Library of Medicine's PubChem record lists nicotinamide, niacinamide, CAS 98-92-0, and related synonyms for the same compound.
| Canonical ingredient | Niacinamide |
|---|---|
| Common scientific synonym | Nicotinamide |
| CAS Registry Number | 98-92-0 |
| PubChem CID | 936 |
| Molecular formula | C6H6N2O |
How should an ingredient parser detect niacinamide?
- Split the INCI list into tokens. Preserve text inside parentheses and avoid splitting botanical names or color-index entries incorrectly.
- Normalize presentation. Trim whitespace, normalize Unicode and case, and standardize punctuation without deleting meaningful words.
- Resolve exact names and synonyms. Map
Niacinamideand a curatedNicotinamidesynonym to one canonical record. - Use identifiers when supplied. CAS 98-92-0 is stronger evidence than a marketing phrase such as “B3 complex.”
- Return match status separately from ratings. A successful identity match does not establish concentration, formulation quality, or suitability for a specific person.
How can you detect niacinamide with the Dermalytics API?
Use the single-ingredient endpoint when you already have one normalized token. Use batch analysis for a product label so every input row retains a found status and a canonical result when matched.
const response = await fetch(
"https://api.dermalytics.dev/v1/analyze",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DERMALYTICS_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
ingredients: ["Aqua", "Glycerin", "Niacinamide"],
}),
},
);
const analysis = await response.json();
const niacinamide = analysis.ingredients.find(
(row) => row.found && row.cas_no === "98-92-0",
);The API also exposes GET /v1/ingredients/niacinamide for a direct lookup. See the API documentation and the live OpenAPI contract for the current request and response schemas.
Should you infer concentration from ingredient order?
No. An INCI list supplies ordered label text, not a complete formula. Position can be a useful product-data feature, but it does not reveal the exact percentage of niacinamide. Store the source token and its list position separately, and do not convert either into a concentration claim.
What should a product filter store?
- The original label token for traceability
- The normalized token used for lookup
- The canonical ingredient ID and name
- The match method: exact name, synonym, or external identifier
- A confidence or review state for unresolved OCR text
- The source and date for regulatory or reference fields
What can ingredient data not tell you?
Identity data cannot determine whether a finished product will work for, irritate, or be appropriate for an individual. Product concentration, delivery system, interactions, exposure, and personal history are not recoverable from the ingredient name alone. Dermalytics ratings are structured product-development signals, not medical diagnoses or individualized treatment advice.
Build the filter against a real API response
Create an API key, test a representative INCI list, and verify the returned fields in your own product model before processing a full catalogue.
Sources checked July 20, 2026: PubChem's Niacinamide record, the European Commission CosIng ingredient record, the Cosmetic Ingredient Review entry, and the Dermalytics OpenAPI contract.