If you've ever looked at a rail freight bill of lading, you've seen a 7-digit number next to your commodity description. That's the STCC code — Standard Transportation Commodity Code — and it's one of the most important numbers in rail shipping. It tells the railroad what you're shipping, determines which rate applies, dictates equipment requirements, and flags whether special handling rules kick in. Most shippers never think about it until something goes wrong: a rate correction shows up on their invoice, a car gets held at origin, or a hazmat shipment gets rejected because the code doesn't match the placard. This guide breaks down how STCC codes work, how they're structured, and how to make sure you're using the right one.
What Are STCC Codes?
STCC stands for Standard Transportation Commodity Code. It's a 7-digit classification system maintained by the Association of American Railroads (AAR) that assigns a unique code to every commodity that moves by rail in North America. Think of it as the railroad's universal product catalog — every ton of coal, every carload of lumber, every tank car of ethanol has a corresponding STCC code that identifies exactly what it is.
The system was developed decades ago to standardize how railroads classify freight. Before STCC codes, each railroad had its own commodity descriptions and rate schedules, which made pricing inconsistent and billing disputes constant. The STCC system gave the industry a common language: a 7-digit number that means the same thing whether you're shipping on BNSF, Union Pacific, CSX, or Norfolk Southern.
STCC codes appear on virtually every rail shipping document you'll encounter. They show up on the bill of lading, the waybill, the freight bill, tariff publications, and rate quotes. If you're shipping by rail for the first time, you'll need to know your STCC code before you can get an accurate rate quote or book a car.
How STCC Codes Are Structured
An STCC code is a 7-digit number, and the digits aren't random. Each segment narrows the classification from broad category down to specific product. Understanding this hierarchy helps you verify you're using the right code and troubleshoot when something looks off.
The Digit Breakdown
Here's how the 7 digits break down, using crushed stone (STCC 1411210) as an example:
- First 2 digits (14): Major commodity group — "Nonmetallic Minerals"
- Digits 3-4 (11): Subgroup — "Crushed and Broken Stone"
- Digits 5-7 (210): Specific commodity — "Crushed Stone, NEC (not elsewhere classified)"
The structure works like a tree. The first two digits place you in a broad category (there are roughly 40+ major commodity groups). Each subsequent pair of digits gets more specific. By the time you reach all seven digits, you've identified the exact product.
Major Commodity Groups
The first two digits tell you the general category. Some of the most common groups rail shippers encounter:
| First 2 Digits | Commodity Group | Examples |
|---|---|---|
| 01 | Farm Products | Wheat, corn, soybeans |
| 10 | Metallic Ores | Iron ore, copper ore |
| 11 | Coal | Bituminous, anthracite, lignite |
| 14 | Nonmetallic Minerals | Sand, gravel, crushed stone |
| 20 | Food & Kindred Products | Processed foods, sugar, beverages |
| 24 | Lumber & Wood Products | Lumber, plywood, wood chips |
| 28 | Chemicals | Fertilizers, industrial chemicals, plastics |
| 29 | Petroleum & Coal Products | Crude oil, diesel fuel, asphalt |
| 32 | Clay, Concrete, Glass | Cement, bricks, glass products |
| 33 | Primary Metals | Steel, aluminum, copper |
| 40 | Waste & Scrap | Scrap metal, recyclables |
| 46 | Miscellaneous Mixed Shipments | Multimodal container freight |
| 49 | Hazardous Materials | Hazmat-classified commodities |
Notice that group 49 is special — it's reserved entirely for hazardous materials, which we'll cover in detail below.
Why STCC Codes Matter to Shippers
STCC codes aren't just administrative paperwork. They directly affect four things that hit your bottom line: rates, equipment, handling, and compliance.
Rate Determination
The STCC code is one of the primary inputs railroads use to calculate your freight rate. Railroad tariffs are organized by STCC code — each code maps to a specific rate group, and those rate groups have different pricing structures. Two commodities moving in the same type of car over the same route can have very different rates because their STCC codes place them in different rate categories.
This is why getting the code right matters financially. If your product gets classified under a higher-rated STCC code than it should be, you'll pay more per carload than necessary. And if a railroad audits the shipment and finds you've been using a lower-rated code than appropriate, they'll back-bill you for the difference — sometimes going back months. For a deeper look at how railroad pricing works, see our guide to rail freight rates.
Equipment Assignment
Different STCC codes require different types of railcars. Grain (STCC 01) moves in covered hoppers. Crushed stone (STCC 14) moves in open-top hoppers or gondolas. Chemicals (STCC 28) often require tank cars with specific linings and fittings. When you provide your STCC code on a car order, the railroad uses it to determine what equipment to supply. A wrong code can result in the wrong car showing up at your facility — and reordering means delays and potential demurrage charges on the car you can't use.
Handling and Routing
Certain STCC codes trigger special handling requirements. High-value goods might get priority routing. Temperature-sensitive commodities might be restricted from certain routes or yards. Heavy-loading commodities affect which track segments the car can travel (some branch lines have lower weight limits). The STCC code tells the railroad's operations team how to handle your car from origin to destination.
Regulatory Compliance
For hazardous materials, the STCC code is a compliance requirement, not just a pricing tool. Hazmat shipments must carry the correct 49-series STCC code, and that code must match the UN/NA number, the placard, and the shipping description on the bill of lading. Mismatches can result in fines, shipment rejection, or — in serious cases — DOT enforcement action. The stakes are higher here than a rate correction.
Common STCC Codes for Rail Commodities
Here are some of the most frequently used STCC codes across major rail commodity groups. If you're shipping any of these products, these are the codes you'll be working with:
Farm Products (01-Series)
- 0113210 — Corn (field corn, shelled)
- 0113230 — Soybeans
- 0113710 — Wheat
- 0113320 — Sorghum grain
Grain is one of the highest-volume rail commodities in North America. If you're an elevator operator or grain merchandiser, you'll use these codes on every shipment. See our grain shipping guide for the full picture.
Coal (11-Series)
- 1121120 — Bituminous coal
- 1121220 — Sub-bituminous coal
- 1121320 — Lignite
- 1121420 — Anthracite coal
Aggregates and Minerals (14-Series)
- 1411210 — Crushed stone, NEC
- 1421110 — Sand and gravel
- 1455120 — Raw calciumite (limestone)
- 3241110 — Portland cement (note: cement falls under 32-series as a manufactured product)
Metals (33-Series)
- 3312110 — Steel bars and shapes
- 3312230 — Steel plate
- 3316120 — Steel pipe and tubing
- 3312340 — Steel coils (hot-rolled)
Fertilizers (28-Series)
- 2818142 — Anhydrous ammonia
- 2874110 — Phosphate fertilizer
- 2812530 — Potash (potassium chloride)
- 2871220 — UAN solution (liquid nitrogen fertilizer)
Petroleum (29-Series)
- 2911110 — Gasoline
- 2911230 — Diesel fuel
- 2911310 — Crude petroleum
- 2911500 — Asphalt
Hazmat and the 49-Series STCC Codes
The 49-series STCC codes deserve their own section because they work differently from standard commodity codes and carry real regulatory weight.
When a commodity is classified as hazardous material under DOT regulations (49 CFR), it gets a 49-series STCC code in addition to — or sometimes instead of — its standard commodity code. The 49-series code is built from the commodity's UN/NA identification number, which links it directly to the DOT hazmat table.
How 49-Series Codes Are Structured
A 49-series STCC code starts with "49" and incorporates the hazmat class and UN number. For example:
- 4905812 — Anhydrous ammonia (Class 2.2, UN 1005)
- 4918495 — Ethanol (Class 3, UN 1170)
- 4916040 — Chlorine (Class 2.3, UN 1017)
When shipping hazmat by rail, the 49-series code must appear on the bill of lading, and it must match the placard on the car, the shipping name in the commodity description, and the emergency response information. Railroads cross-reference all of these, and discrepancies will stop your shipment.
Key Rules for Hazmat STCC Codes
- Always use the 49-series code — not the standard commodity code — for any hazmat shipment
- Match it to the UN/NA number exactly — the railroad will verify this against the placard
- Update codes when regulations change — DOT periodically reclassifies materials, and your STCC code must reflect current classifications
- Residue cars still need hazmat codes — a tank car that last contained a hazmat product is still considered hazmat until it's been cleaned and purged
If you're shipping fertilizers like anhydrous ammonia or any petroleum products, you'll be dealing with 49-series codes regularly. Don't guess on these — get them wrong and you're looking at fines, not just rate adjustments.
STCC vs NMFC: Rail Codes vs Trucking Codes
If you ship by both rail and truck, you've probably encountered two different classification systems: STCC for rail and NMFC for trucking. They serve a similar purpose — classifying commodities for pricing — but they're completely separate systems maintained by different organizations.
| Feature | STCC (Rail) | NMFC (Trucking) |
|---|---|---|
| Maintained by | AAR (Association of American Railroads) | NMFTA (National Motor Freight Traffic Association) |
| Code format | 7 digits | 6 digits + sub-items |
| Classification basis | Commodity identity and characteristics | Density, stowability, handling, liability |
| Rate impact | Maps to railroad tariff rate groups | Maps to LTL freight classes (50-500) |
| Hazmat handling | 49-series STCC codes | Hazmat class within NMFC item |
| Used by | Class I, short line, and regional railroads | LTL and truckload carriers |
The key difference is philosophical. NMFC classification is heavily based on density (how much space your freight takes up relative to its weight), while STCC classification is based on what the commodity actually is. A carload of steel coils and a carload of crushed stone might have similar densities, but they have very different STCC codes — and very different rate structures — because the railroads price them based on commodity value, handling requirements, and market competition.
There's no direct crosswalk between STCC and NMFC codes. If you're transitioning freight from truck to rail (or using transloading to combine both), you'll need to know the appropriate code for each mode separately.
How to Find the Right STCC Code
Finding the correct STCC code for your commodity is straightforward if you know where to look. Here's the process:
Start with the AAR STCC Directory
The official STCC directory published by the AAR is the authoritative source. It lists every active code with full commodity descriptions. Your rail logistics provider should have access to the current edition and can look up codes for you.
Check Railroad Tariff Publications
Class I railroads publish their tariffs with STCC codes listed by commodity. If you're already working with a railroad, their pricing team can confirm the correct code for your product. Rate quotes typically include the STCC code, so you can verify it matches your commodity.
Describe Your Product Precisely
When looking up a code, be specific about what you're shipping. "Steel" isn't enough — the code differs for steel coils, steel plate, steel pipe, steel scrap, and structural steel. Similarly, "chemicals" could be dozens of different codes. The more specific your commodity description, the more accurate the code assignment.
Consider the Form and Packaging
The same basic material can have different STCC codes depending on its form. Raw iron ore has a different code than iron ore pellets. Bulk liquid caustic soda has a different code than bagged dry caustic soda. The physical form of your product — bulk, bagged, liquid, pelletized, coiled — can change the classification.
Verify with Your Rail Logistics Provider
Before locking in a code for a new commodity, confirm it with someone who deals with rail tariffs daily. A good rail logistics provider will verify the code, check that it matches the tariff rate you were quoted, and flag any hazmat implications you might have missed.
Common STCC Mistakes and How to Avoid Them
After years of coordinating rail shipments, these are the STCC-related errors we see most often — and every one of them costs the shipper time or money.
1. Using a Generic Code When a Specific One Exists
Every commodity group has "NEC" (not elsewhere classified) catch-all codes. Some shippers default to these when a more specific code exists for their product. The problem: NEC codes often carry higher rates because railroads price them conservatively. If your specific product has its own STCC code, using it can mean a lower rate.
For example, shipping potash as "fertilizer materials, NEC" instead of using the specific potash code (2812530) could put you in a higher rate group. Always look for the most specific code that matches your product.
2. Not Updating Codes When Products Change
If your manufacturing process changes the composition, form, or classification of your product, the STCC code may need to change too. A shipper who starts producing a different grade of steel, switches from bulk to bagged product, or changes the chemical formulation of a product should verify the STCC code still applies. Using an outdated code is one of the most common triggers for railroad audits and rate corrections.
3. Confusing Standard and Hazmat Codes
A commodity can have both a standard STCC code (describing what it is) and a 49-series code (describing its hazmat classification). For hazmat shipments, you must use the 49-series code. Some shippers accidentally use the standard code on hazmat shipments, which can result in the car moving without proper hazmat routing and handling — a serious safety and compliance issue.
4. Copying Codes from Old BOLs Without Verifying
It's tempting to pull the STCC code from a previous bill of lading and reuse it. This works fine as long as the code hasn't been updated, your product hasn't changed, and the original code was correct in the first place. We've seen shippers carry forward an incorrect code for years, only discovering it during a railroad audit that results in a large back-billing for rate differences.
5. Ignoring Packaging and Form Differences
As mentioned above, the same base material in different forms can have different STCC codes. Crude oil in a tank car has a different code than petroleum coke in a gondola, even though both come from petroleum. If you're shipping the same basic commodity in a new form or packaging, double-check the code.
STCC Codes in Your Shipping Documents
The STCC code appears in multiple places throughout the shipping process. Knowing where it shows up helps you verify consistency and catch errors before they become problems:
- Bill of Lading (BOL): The STCC code is required on every rail bill of lading. It appears alongside the commodity description and, for hazmat, alongside the UN/NA number and proper shipping name.
- Waybill: The railroad generates a waybill from your BOL data, and the STCC code carries over. This is the document that travels with the car and determines routing and handling.
- Freight Bill / Invoice: Your freight charges are calculated based on the STCC code in the waybill. If the code on your invoice doesn't match what you put on the BOL, investigate — it may indicate a reclassification.
- Rate Quotes: When you request a rate quote, you'll provide the STCC code. The quote you receive is specific to that code, and using a different code on the actual shipment can invalidate the quoted rate.
- Car Orders: Your STCC code helps the railroad determine which equipment to supply. This is especially important for tank car specifications, where the commodity dictates lining, fittings, and safety features.
Consistency across all of these documents is critical. If your BOL says one STCC code and your rate agreement references another, you're setting yourself up for a billing dispute. For more on rail shipping paperwork, check our supply chain courses which cover documentation in detail.
Frequently Asked Questions
What is an STCC code in rail freight?
An STCC (Standard Transportation Commodity Code) is a 7-digit number used by railroads to classify every commodity shipped by rail. It determines which tariff rates apply, what equipment is required, and whether special handling rules are in effect.
How do I find the STCC code for my product?
Start with your railroad's tariff publications or ask your rail logistics provider. The AAR's STCC directory is the official reference. Your product's composition, form, and packaging all affect which code applies, so be as specific as possible when looking one up.
What happens if I use the wrong STCC code?
Using the wrong STCC code can result in rate corrections (usually higher), reclassification penalties, rejected shipments, or compliance violations if hazmat codes are involved. Railroads audit STCC codes and will back-bill the difference if they find a mismatch.
What is the difference between STCC and NMFC codes?
STCC codes are used exclusively for rail freight, while NMFC codes are used for trucking. They classify commodities for pricing but use different numbering systems and are maintained by different organizations — the AAR for STCC and the NMFTA for NMFC.
Do STCC codes affect rail freight rates?
Yes. STCC codes are one of the primary factors that determine your rail freight rate. Each code maps to a tariff rate group, and different commodities carry different rate structures based on value, density, handling requirements, and market factors.