Skip to content
All Posts
Guide

How to Find the HS Code for Anything You Ship (2026)

·8 min read·By RevAddress·Guide

The customs block on a USPS international label has one field most sellers leave blank, the HSTariffNumber. The USPS spec is blunt about what happens when you leave it blank — “USPS will attempt to look up the HS tariff number, which may result in longer response times.” Your package still ships. It just gets classified by someone who has never seen it, against a description you wrote in a hurry.

Finding the code yourself takes about three minutes once you know how the schedule is built. Here is the method, the five fields USPS actually validates, and five worked examples pulled from the live US tariff schedule.

What an HS code is

The Harmonized System is a six-digit product classification maintained by the World Customs Organization. Those six digits mean the same thing in every country that signed on, which is nearly all of them. A wool sweater is 6110.11 in Dublin, in Tokyo, and in Newark.

The United States extends those six digits to ten. Imports use the HTS (Harmonized Tariff Schedule, published by the US International Trade Commission), which carries the duty rate. Exports use Schedule B (published by the Census Bureau), which carries the statistical reporting number. Both are built on the same six-digit root, and both are accepted on a USPS customs form.

That wool sweater, all three ways:

Layer Code Who publishes it
HS (international) 611011 World Customs Organization
HTS (US import) 6110.11.00.25 USITC
Schedule B (US export) 6110110010 US Census Bureau

Shipping out of the US, either the HTS or the Schedule B number is fine. What matters is that the first six digits are right, because that is the part the receiving country reads.

The three-minute method

Name the thing by its head noun plus its material. The tariff schedule is written in plain nouns and materials rather than product-page language. Search the free HS code lookup for “vintage wool sweater” and you get zero results, because “vintage” is not a tariff concept. Search “wool sweater” and the right line comes back immediately. Strip the adjectives that describe condition, season, or brand, and keep the ones that describe substance.

Prefer the deepest line that carries a duty rate. The schedule nests: chapter, heading, subheading, then the statistical line that actually goes on the form. Some of those levels are structural only. 7113.11 is a real subheading for silver jewelry, and it has no rate at all. 7113.11.50.00 carries 5%. If the line you picked has no duty rate next to it, you have stopped one level too early.

For apparel, settle knit versus woven before anything else. Chapter 61 is knitted or crocheted. Chapter 62 is woven. T-shirts, sweaters, hoodies, and leggings are almost always knitted and live in 61. Dress shirts and most trousers are woven and live in 62. Get this wrong and the code is not close — it is a different chapter.

Read the tariff path, not just the line text. Two lines in the schedule can carry identical descriptions and different duty. “Mugs and other steins” appears twice: once at 6911.10.45.00 at 14%, once at 6912.00.44.00 at 10%. Nothing in the description separates them. The path does — 6912 is explicitly “other than of porcelain or china.”

Check whether value picks the line. A surprising number of subheadings split on price rather than on the product. A leather handbag valued over $20 is 4202.21.90.00 at 9%; the same bag valued at $20 or less is 4202.21.60.00 at 10%. Silver jewelry splits at $18 per dozen pieces.

The fields USPS actually validates

Once you have the code, it goes into the InternationalCustomsForm block on the label request. Three things are required: AESITN, customsContentType, and contents. Here is what each item inside contents carries.

Field Rule Notes
itemDescription 1–30 characters “None”, “Not Applicable”, “N/A”, “Null”, “Gift”, and “Merchandise” are all rejected, regardless of case
HSTariffNumber 6–14 characters Six-digit root satisfies the field; the ten-digit line is better
countryofOrigin ISO-2, required Where it was made, not where you are shipping from
itemQuantity 1–9,999 Integer
itemTotalValue 0.01–999,999.99 USD itemValue is deprecated; use the total
itemTotalWeight Greater than zero itemWeight is deprecated the same way

Four things about that table are worth pulling out.

“Gift” is banned as a description and valid as a content type. These are two different fields doing two different jobs. customsContentType is an enum with twelve values including MERCHANDISE, GIFT, DOCUMENT, and PHARMACEUTICALS — that field says why the parcel is moving. itemDescription says what is in the box, and the words “Gift” and “Merchandise” tell a customs officer nothing, which is exactly why the spec rejects them. USPS’s own example description in the spec is “Policy guidelines document.”

Thirty characters is tighter than it sounds. “Handmade sterling silver drop earrings” is 38. “Sterling silver earrings” is 24 and clears.

One field carries your entire export-filing obligation. AESITN takes either a 14-digit AES Internal Transaction Number or an exemption legend. For a shipment at or under $2,500 per Schedule B line, that legend is NO EEI 30.37(a). Above $2,500 you file through AES and put the real ITN in.

You do not pick CN22 or CP72. The form is generated from the content type and the weight. The first five content items print on the form itself; anything past five continues on a second page.

Five worked examples

Every code and rate below came back from the live tariff catalog, revision 2026-07-27.

What you are shipping Search this HTS line General duty The catch
Wool sweater, boys’ wool sweater 6110.11.00.25 16% Dropping “wool” lands you on 6110.20.20.15 at 16.5% — cotton
Leather handbag, $80 retail handbags leather 4202.21.90.00 9% Under $20 it is 4202.21.60.00 at 10%
Stoneware coffee mug ceramic mug 6912.00.44.00 10% The porcelain twin, 6911.10.45.00, is 14% with identical wording
Organic cotton t-shirt cotton t-shirt 6109.10.00.45 16.5% Chapter 61, knitted. Not 6205, which is woven shirts
Sterling silver earrings jewelry of silver 7113.11.50.00 5% Under $18 per dozen it jumps to 7113.11.20.00 at 13.5%

The wool sweater is the cleanest illustration of why material belongs in the query. The full path reads “Sweaters, pullovers, sweatshirts, waistcoats (vests) and similar articles, knitted or crocheted: Of wool or fine animal hair: Of wool: Sweaters.” Every fork in that path is a decision you made when you typed the word “wool.”

The leather handbag shows the heading trap. 4202.21 is real, correct, and unusable — it has no rate. Below it sit three lines: reptile leather at 5.3%, valued at $20 or less at 10%, and valued over $20 at 9%. Pick the wrong material branch entirely and you land at 4202.29.90.00, which is 20%.

The mug is the one that catches experienced sellers. Search results show 6911.10.45.00 and 6912.00.44.00 side by side, both reading “Mugs and other steins,” four points of duty apart. Porcelain and bone china go to 6911. Stoneware, earthenware, and most studio ceramics go to 6912. The word “stoneware” does not appear in either line, which is why searching for it returns nothing and searching “ceramic mug” works.

The t-shirt is decided at the chapter level before any line matters. Anything knitted or crocheted is chapter 61 no matter what it is called on your product page. “Organic” carries no tariff meaning at all.

The silver earrings repeat the value split, this time on an odd basis of $18 per dozen pieces or parts rather than per item. Cheap silver studs are dutiable at 13.5%; anything above that threshold is 5%.

Same data, as an API

The lookup runs against the complete USITC HTS catalog and the Census Schedule B catalog loaded whole into a full-text index. The same endpoint is open with no key and no signup:

GET https://api.revaddress.com/api/customs/search?q=wool+sweater&limit=5
{
  "query": "wool sweater",
  "revision": "2026-07-27",
  "count": 5,
  "results": [
    {
      "code": "6110.11.00.25",
      "hs6": "611011",
      "description": "Boys' (445)",
      "path": [
        "Sweaters, pullovers, sweatshirts, waistcoats (vests) and similar articles, knitted or crocheted:",
        "Of wool or fine animal hair:",
        "Of wool",
        "Sweaters:"
      ],
      "units": ["doz.", "kg"],
      "generalRate": "16%",
      "specialRate": "Free (AU,BH, CL,CO,IL,JO,KR, MA,OM,P, PA,PE,S,SG)",
      "otherRate": "54.5%",
      "scheduleB": { "code": "6110110010", "naics": "315250", "sitc": "84530" },
      "source": "hts"
    }
  ]
}

path is the field to read when two lines look alike. generalRate being null is the signal that you are looking at a structural heading rather than a line you can put on a form.

Where to go from here

The HS code lookup is free — no signup, no daily cap, the whole schedule. It is the right tool when you have one item in front of you and a customs form open in another tab.

Catalog Classification is the same catalog run across a CSV of your SKUs: every row comes back with its HTS code, Schedule B number, duty rate, a confidence band, runner-up codes for the close calls, a 30-character contents description, and the AES flag. $47 up to 100 SKUs, $97 up to 1,000, first three rows classified free before you pay.

Neither is a binding ruling. Classification is the exporter’s responsibility, and a CBP ruling always wins. What these do is put the full schedule and its structure in front of you in seconds instead of an afternoon.

If you are building the label call rather than filling in the form by hand, the USPS API pricing breakdown covers what the rest of the integration costs.

Keep the free proof wedge first

USPS v3 developer toolkit. Free tier for standardization and geocoding; DPV and rates on your USPS license (BYOK). Flat monthly pricing.

Standardization, geocoding, and address extract are the free proof path. Connect your USPS license for DPV and rates; labels, tracking, and pickup unlock on paid plans.