Skip to content
All Posts
Guide

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

·Updated ·9 min read·By RevAddress·Guide

The customs block on a USPS international label has one field most sellers leave blank: HSTariffNumber. The USPS spec is blunt about what happens when you do. “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 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 nothing useful, 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. Heading 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.

Know what the last two digits are doing. On an HTS line the final pair is the statistical suffix, and in apparel it usually encodes who wears the garment rather than anything about the product. A cotton t-shirt is 6109.10.00 at 16.5% whoever it is for; the suffix is .12 for men’s, .40 for women’s, .14 for boys’, .45 for girls’. The duty is identical across all four. Pick the one that matches, but do not agonize over it the way you would over a chapter.

The fields USPS actually validates

Once you have the code, it goes into the InternationalCustomsForm block on the label request. Three things are required at the block level: 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, and 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. The USPS spec’s own example description 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. Write the description before you write the listing title and you will not have to cut it twice.

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. The threshold is per Schedule B line, not per parcel, which means a box holding two different products can sit under the exemption on both lines while costing more than $2,500 in total.

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 was returned by the live tariff catalog, revision 2026-07-27, on the day this was updated.

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%, which is cotton
Leather handbag, $80 retail handbags leather 4202.21.90.00 9% At $20 or less 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% At $18 or less 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, because 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%. Note which way the split runs. The cheaper bag carries the higher rate, so a seller who guesses from intuition guesses wrong.

The mug is the one that catches experienced sellers. Search the schedule’s own words, “mugs steins,” and 6911.10.45.00 and 6912.00.44.00 come back side by side, identical text, four points of duty apart. Porcelain and bone china go to 6911. Stoneware, earthenware, and most studio ceramics go to 6912. The word “stoneware” appears in neither line, which is why searching for it gets you nowhere and searching “ceramic mug” puts 6912 on top.

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%. Two more lines sit in the same subheading, including chain sold in continuous lengths at 6.3%, so read the descriptions rather than taking the first hit.

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:

Search the tariff schedule — no key requiredbash
curl "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"
    }
  ]
}

Three fields do most of the work. path is what to read when two lines look alike. generalRate coming back null is the signal that you are looking at a structural heading rather than a line you can put on a form. And scheduleB saves the second lookup: the export number is keyed off the same six-digit root, so it arrives with the import line rather than after it.

specialRate is the one people misread. It lists the trade programmes under which the rate is free, by country code. It is not your rate unless the goods qualify under that programme, and qualifying is a documentation question, not a lookup.

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 ra_hs_code and ra_hs6, the ra_schedule_b export number, duty columns, units, NAICS, an ra_confidence band, two runner-up codes for the close calls, an ra_contents_description already cut to the 30-character customs-form limit, an ra_eei flag for the lines that need an AES filing, and ra_flags on the rows a person should decide. A classification report comes with it: the confidence mix, duty exposure by heading, and the chapter distribution. $47 up to 100 SKUs, $97 up to 1,000, and the first three rows are 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 after the August 2026 license change.

Start here

Questions

What is the difference between an HS code, an HTS code, and a Schedule B number?
They share a six-digit root. HS is the six-digit international classification maintained by the World Customs Organization. HTS is the ten-digit US import schedule published by the US International Trade Commission and carries the duty rate. Schedule B is the ten-digit US export schedule published by the Census Bureau and carries the statistical reporting number. On an outbound USPS label either ten-digit number is accepted, because the receiving country reads the first six.
What happens if I leave the HS tariff number blank on a USPS customs form?
The parcel still ships. The USPS spec says USPS will attempt to look up the tariff number itself, which may result in longer response times. The classification is then made by someone who has never seen the item, from a description you wrote in a hurry.
Why do two tariff lines with the same description have different duty rates?
Because the difference lives in the path above the line, not in the line text. "Mugs and other steins" appears at 6911.10.45.00 at 14% and at 6912.00.44.00 at 10%. Heading 6912 is explicitly "other than of porcelain or china", so porcelain and bone china go to 6911 and stoneware and earthenware go to 6912. Always read the full path a line sits under.
How long can an item description on a customs form be?
One to thirty characters, and the words None, Not Applicable, N/A, Null, Gift, and Merchandise are rejected in any case. "Handmade sterling silver drop earrings" is 38 characters and fails. "Sterling silver earrings" is 24 and clears.
Do I need to file through AES for a small parcel?
Not usually. The AESITN field takes either a 14-digit AES Internal Transaction Number or an exemption legend. 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 the field.