Key takeaways
- Section 2 of an SDS holds the GHS classification, signal word, pictograms and the H (hazard) and P (precautionary) statements.
- H and P codes are easy to match with a pattern, but the classification text, categories and combined statements are not.
- Keep codes and their full text together, and keep the document's own wording; do not rebuild statements from a lookup table.
What section 2 contains#
Section 2 of a safety data sheet, "Hazards identification", is the part most compliance workflows need first. It states how the product is classified under GHS or CLP (for example Flammable liquids, Category 2), the signal word (Danger or Warning), the pictograms, the hazard statements (H codes) and the precautionary statements (P codes). The record returns these under hazards_identification, with fields such as ghs_classification, signal_word, pictograms, h_statements and p_statements.
Why a regular expression is not enough#
It is tempting to search the text for H\d{3} and P\d{3}. That finds codes, and it misses most of the problem:
- Combined codes. Statements such as
P301+P312orH300+H310join several codes with a plus sign. - Wording differs. The same code is printed with slightly different text in different regions and versions, and some suppliers add their own sentences.
- Layout. Classifications often sit in tables that split across pages, or in columns that text extraction reads in the wrong order.
- Other sections repeat codes. Sections 3, 11 and 16 mention H codes too. A global search collects codes that do not belong to the product's own classification.
- Several regimes. One document may carry an EU CLP classification and a US OSHA HazCom one. They are not always the same.
What to keep in the data#
Store each hazard statement as the code plus the text exactly as the document prints it. If your system also needs a normalized form, add it next to the original instead of replacing it. When the original and your lookup disagree, you want to see both. For the classification, keep the hazard class and category as written, and keep the signal word as its own field, because downstream label and risk-assessment tools key on it.
Getting it from the API#
Send the PDF to POST /extract-sds and read the hazards_identification object in the response. The same extraction also fills transport_information (UN number, hazard class, packing group) and composition, so one document gives you identity, hazards and transport data together. If the document is unclear, warnings says so and confidence_score drops. Send those records for review.
The GHS classification extraction page lists the fields and what the extraction does with scanned and multilingual PDFs.
Frequently asked questions
Does the API invent H or P statements that are not in the document?
The extraction is instructed to copy what the document states and not to add statements it does not contain. Records with warnings or a low confidence score should still be reviewed.
Does it work on scanned or non-English SDS files?
Yes. Scanned PDFs and multilingual documents are supported. The response includes the detected document_language.