Every US road and rail hazardous goods classification starts in the same place: the Hazardous Materials Table at 49 CFR 172.101. It is free, it is authoritative, and it is laid out in a way that makes perfect sense once someone explains the columns and is close to unreadable before that.
Nothing else in hazardous goods classification substitutes for it. Supplier data, marketplace guidance and third-party tables are all downstream of this one document, and where any of them disagree with it, it wins.
This guide walks the table column by column, flags the two columns people skip, and sets out what a mistake actually costs.
Where hazardous goods classification starts
The Hazardous Materials Table (the HMT) lists every material recognised as hazardous for transport in the US, with all the attributes that follow from that recognition. It sits inside the Hazardous Materials Regulations, administered by PHMSA, and the current text is free to read on eCFR.
Work from eCFR rather than a printed copy or a PDF someone circulated. The regulations are amended through rulemaking, including periodic harmonisation with the UN Model Regulations and the international air and sea codes, and eCFR reflects the current text.
Reading the columns
| Column | Contains | Why it matters |
|---|---|---|
| 1 | Symbols | Modifies how the entry is used — see below |
| 2 | Hazardous materials descriptions and proper shipping names | The exact wording that goes on your shipping paper |
| 3 | Hazard class or division | Determines labels and placards |
| 4 | Identification number | The UN or NA number |
| 5 | Packing group | Sets the packaging performance standard |
| 6 | Labels | What goes on the package, including subsidiary risk labels |
| 7 | Special provisions | Exceptions, extra conditions and relief — the column people skip |
| 8 | Packaging authorisations | Sections for exceptions, non-bulk and bulk packaging |
| 9 | Quantity limitations | Passenger aircraft and cargo aircraft limits per package |
| 10 | Vessel stowage | Location and other stowage provisions for water transport |
Column 1: the symbols that change everything
Easy to overlook because it is often blank. When it is not, it changes how the entry works:
- + — fixes the proper shipping name, hazard class and packing group regardless of whether the material actually meets the class criteria. Legacy classifications preserved deliberately.
- A — the entry applies only to air transport, unless the material is a hazardous substance or hazardous waste.
- W — the same restriction, for water transport.
- D — appropriate for domestic transport but possibly not international.
- I — appropriate for international transport; a different name may apply domestically.
- G — a generic entry requiring a technical name in brackets after the shipping name.
The G symbol is the one that generates the most defective paperwork. It is what turns "UN1993, Flammable liquid, n.o.s." into "UN1993, Flammable liquid, n.o.s. (contains ethanol, isopropanol)". The bracketed constituents are not optional and are frequently missing.
Column 7: where the exceptions live
Special provisions are the most under-read part of the table, and they cut both ways. Some impose additional requirements. Others grant relief that would materially reduce your compliance burden if you knew it existed.
They appear as codes, and the codes resolve in 49 CFR 172.102. Numeric codes are general; letter-prefixed codes are mode-specific — A for air, B for bulk packaging, IB for IBCs, N for non-bulk, T and TP for portable tanks, W for water.
The practical failure is treating the table row as the complete answer. It is not. An entry with three special provision codes in column 7 has three more places you need to look before you know what applies.
Choosing between a specific and a generic entry
Most hazardous goods classification errors we see are not exotic. They come from picking the wrong kind of entry, and the rule that governs it is short enough to memorise.
A specific entry always takes precedence over a generic one. The order of preference runs:
- A specific entry naming the substance — "Acetone", UN1090.
- A specific n.o.s. entry naming a chemical group — "Alcohols, n.o.s.", UN1987.
- A general n.o.s. entry for the class — "Flammable liquid, n.o.s.", UN1993.
Work down that list and stop at the first entry that genuinely describes your material. Reaching straight for the general n.o.s. entry because it is easy to find is the most common shortcut, and it produces a classification that is not wrong exactly, but is less precise than the regulations require.
Precision matters operationally, not just legally. A specific entry often carries different quantity limits, different packaging authorisations and a different carrier position from the generic one covering the same chemistry. Shipping acetone as UN1993 rather than UN1090 can genuinely cost you allowance you were entitled to.
Where a mixture has several hazardous constituents and no specific entry fits, the generic entry is correct — and the technical names go in the brackets.
What a hazardous goods classification mistake costs
Worth stating precisely rather than vaguely, because the numbers are public. Under 49 CFR 107.329:
- $102,348 maximum civil penalty per violation, with each day of a continuing violation treated separately
- $238,809 where a violation results in death, serious illness, severe injury or substantial destruction of property
Those figures reflect the inflation adjustment effective for violations occurring on or after 30 December 2024. The routine annual increase was not applied for 2026, which is a freeze on the ceiling and emphatically not a freeze on enforcement — inspections continue and Notices of Probable Violation continue to issue.
The per-day multiplier is the part shippers underestimate. A single mis-declared SKU shipping continuously is not one violation; it is one violation repeated every day it goes out of the door.
Classify7 ruleset team
Where a classification goes wrong in practice
A distributor lists a solvent-based adhesive. Someone searches the table for "adhesive", finds UN1133, and copies the row: Class 3, packing group II. The shipping paper reads correctly at a glance.
What was missed sits in columns 1 and 7. UN1133 carries the G symbol, so the entry requires the technical name in brackets — the paperwork should have named the flammable constituents. And column 7 carries special provisions that, followed through to 172.102, changed what packaging was authorised for the pack size being shipped.
Nothing about the row as read was wrong. The classification was simply incomplete, in a way that only becomes visible if you treat the row as an index into the regulations rather than as the answer.
- Stopping at the table row instead of following column 7 into 172.102.
- Leaving the technical name out of the brackets on a G-symbol entry.
- Using a generic n.o.s. entry when a specific entry exists for the material.
- Working from a downloaded PDF of the table rather than the current eCFR text.
- Reading the domestic entry for an international consignment, or vice versa, where D and I symbols apply.
Turning the table into something queryable
The HMT is a data structure with about three thousand rows and a lot of cross-references. Reading it by hand for one shipment is reasonable. Doing it for a catalogue, repeatedly, as amendments land, is not.
Classify7 encodes HMT entries with their special provisions and packaging references, so a classification returns the complete position rather than the row. It is honest about its boundary: the encoded entry set covers the substances that actually appear in commercial parcel and e-commerce shipping, not all three thousand rows, and a request that falls outside it returns needs_review rather than the nearest-looking entry.
For the next steps after an entry, see packing groups I, II and III and the UN number lookup reference. For the air equivalent of this annual amendment cycle, see what changed in the IATA DGR 67th edition.