Research · U.S. tariff schedule
The U.S. tariff schedule's three rate columns, measured (HTS Revision 18, 2026)
Every one of the 7,099 8-digit lines in chapters 01–97 of the U.S. tariff schedule that carry a General duty also carries Special text, and every one of those texts lists at least one special tariff treatment program at Free. This page counts, from the U.S. International Trade Commission's own export, how many lines each program symbol is printed on and how many of those at Free, then how Column 2 compares with General and how the General column is made up. Program symbols and their names are taken from General Note 3(c)(i) of the same revision. The method, the limits and the data are below.
The Special column
In Revision 18 (2026) of the U.S. Harmonized Tariff Schedule, all 7,099 8-digit lines in chapters 01–97 whose General rate is not Free carry Special text, and every one of those texts lists at least one program at Free: 7,099 of 7,099. 6,722 list only Free rates; the other 377 also list a program at a rate other than Free, or with a reference in place of a rate. No line whose General rate is Free carries Special text (0 lines).
That is 7,099 of the 11,414 lines (62.2%). Counted by most-detailed row, the same holds: 12,583 rows with a General duty, and 12,583 of them list a program at Free. Every Special text parsed (0 did not), and none carries the “(s)” marker for a suspended staged rate (0).
How a Special text is written
A Special text is one or more rates, each followed by a parenthesized list of program symbols. This one, printed on the heading lines described further down, lists a set of symbols at Free and then one symbol at a percentage:
Free (A+,AU,B,BH,CL,CO,D,E,IL,JO,MA,OM,P,PA,PE,S,SG)25% (KR)
The schedule's 24 programs use 29 symbols. General Note 3(c)(i) of the same revision lists them: “(i) Programs under which special tariff treatment may be provided, and the corresponding symbols for such programs as they are indicated in the "Special" subcolumn, are as follows:”
Lines per program symbol
One row per symbol, as the schedule prints it, with the program General Note 3(c)(i) assigns it. A line counts once per symbol. At Free: the rate listed with the symbol is Free. Other rate: a stated rate other than Free. Reference: text in place of a rate; of the 771 reference segments on these lines, 767 point to a chapter 98 or chapter 99 provision, such as “See 9823.04.01-9823.04.54 (S+)”, and the other 4 read “The rate applicable to the natural juice in heading 2009”.
| Symbol | Program | 8-digit lines | Most-detailed rows | ||||
|---|---|---|---|---|---|---|---|
| Listing | At Free | Other rate | Reference | Listing | At Free | ||
A |
Generalized System of Preferences | 2,531 | 2,531 | 0 | 0 | 3,727 | 3,727 |
A* |
Generalized System of Preferences | 1,082 | 1,078 | 0 | 4 | 1,846 | 1,842 |
A+ |
Generalized System of Preferences | 1,525 | 1,525 | 0 | 0 | 2,264 | 2,264 |
AU |
United States-Australia Free Trade Agreement | 6,912 | 6,790 | 0 | 122 | 12,340 | 12,210 |
B |
Automotive Products Trade Act | 555 | 555 | 0 | 0 | 1,080 | 1,080 |
BH |
United States-Bahrain Free Trade Agreement Implementation Act | 7,070 | 7,070 | 0 | 0 | 12,553 | 12,553 |
C |
Agreement on Trade in Civil Aircraft | 184 | 184 | 0 | 0 | 336 | 336 |
CL |
United States-Chile Free Trade Agreement | 7,069 | 7,069 | 0 | 0 | 12,549 | 12,549 |
D |
African Growth and Opportunity Act | 5,386 | 5,384 | 0 | 2 | 8,383 | 8,381 |
E |
Caribbean Basin Economic Recovery Act | 5,394 | 5,332 | 62 | 0 | 8,368 | 8,262 |
E* |
Caribbean Basin Economic Recovery Act | 280 | 280 | 0 | 0 | 899 | 899 |
IL |
United States-Israel Free Trade Area | 6,936 | 6,873 | 0 | 63 | 12,372 | 12,306 |
JO |
United States-Jordan Free Trade Area Implementation Act | 7,035 | 7,009 | 26 | 0 | 12,402 | 12,355 |
JP |
Trade Agreement Between the United States and Japan | 257 | 182 | 74 | 1 | 558 | 401 |
K |
Agreement on Trade in Pharmaceutical Products | 453 | 453 | 0 | 0 | 593 | 593 |
P |
Dominican Republic-Central America-United States Free Trade Agreement Implementation Act | 7,020 | 7,020 | 0 | 0 | 12,499 | 12,499 |
P+ |
Dominican Republic-Central America-United States Free Trade Agreement Implementation Act | 62 | 5 | 0 | 57 | 71 | 6 |
L |
Uruguay Round Concessions on Intermediate Chemicals for Dyes | 111 | 111 | 0 | 0 | 153 | 153 |
R |
United States-Caribbean Basin Trade Partnership Act | 259 | 259 | 0 | 0 | 553 | 553 |
MA |
United States-Morocco Free Trade Agreement Implementation Act | 7,070 | 7,020 | 0 | 50 | 12,553 | 12,499 |
SG |
United States-Singapore Free Trade Agreement | 7,070 | 7,070 | 0 | 0 | 12,553 | 12,553 |
OM |
United States-Oman Free Trade Agreement Implementation Act | 7,099 | 7,099 | 0 | 0 | 12,583 | 12,583 |
PE |
United States-Peru Trade Promotion Agreement Implementation Act | 7,096 | 7,046 | 0 | 50 | 12,580 | 12,526 |
KR |
United States-Korea Free Trade Agreement Implementation Act | 7,091 | 7,079 | 12 | 0 | 12,574 | 12,546 |
CO |
United States-Colombia Trade Promotion Agreement Implementation Act | 7,089 | 6,950 | 0 | 139 | 12,571 | 12,399 |
PA |
United States-Panama Trade Promotion Agreement Implementation Act | 7,084 | 6,969 | 0 | 115 | 12,551 | 12,425 |
NP |
Nepal Preference Program | 77 | 77 | 0 | 0 | 135 | 135 |
S |
United States-Mexico-Canada Agreement | 6,929 | 6,929 | 0 | 0 | 12,406 | 12,406 |
S+ |
United States-Mexico-Canada Agreement | 170 | 0 | 0 | 170 | 177 | 0 |
Where a symbol is listed with a percentage, the percentage is below the line's General rate in 132 listings, equal to it in 12 (described below), and above it in 0.
Programs with more than one symbol
A line counts once for a program whichever of its symbols it lists. For a program with one symbol, its lines are that symbol's lines in the table above.
| Program | Symbols as printed | 8-digit lines listing any | Every listing at Free | Some listing not at Free |
|---|---|---|---|---|
| Generalized System of Preferences | A, A* or A+ | 5,138 | 5,134 | 4 |
| Caribbean Basin Economic Recovery Act | E or E* | 5,674 | 5,612 | 62 |
| Dominican Republic-Central America-United States Free Trade Agreement Implementation Act | P or P+ | 7,070 | 7,013 | 57 |
| United States-Mexico-Canada Agreement | S or S+ | 7,099 | 6,929 | 170 |
What these counts do not say
The tables count what the schedule prints. They do not establish whether a program is in effect, or which countries and goods qualify for it, so a symbol's count here says nothing about whether that program, the Generalized System of Preferences included, applies to an entry today. General Note 3(a)(iii) of the same revision:
“(iii) The "Special" subcolumn reflects rates of duty under one or more special tariff treatment programs described in paragraph (c) of this note and identified in parentheses immediately following the duty rate specified in such subcolumn. These rates apply to those products which are properly classified under a provision for which a special rate is indicated and for which all of the legal requirements for eligibility for such program or programs have been met. Where a product is eligible for special treatment under more than one program, the lowest rate of duty provided for any applicable program shall be imposed. Where no special rate of duty is provided for a provision, or where the country from which a product otherwise eligible for special treatment was imported is not designated as a beneficiary country under a program appearing with the appropriate provision, the rates of duty in the "General" subcolumn of column 1 shall apply.”
Column 2
In Revision 18 (2026), every 8-digit line in chapters 01–97 carries a Column 2 rate: 11,414 of 11,414. Where General and Column 2 are both ad valorem, on 5,264 lines, Column 2 is higher on 5,228 (99.3%), equal on 36 and lower on 0.
Reading Free as 0% ad valorem brings in the lines where either column is Free: of 8,804 comparable lines, Column 2 is higher on 8,011 (91.0%), equal on 793 (9.0%) and lower on 0. The other 2,610 lines have a specific, compound or other rate in at least one of the two columns; they are counted, not compared, so “never below General” is a statement about the comparable lines only.
| Column 2 rate form | 8-digit lines | Share | Most-detailed rows | Share |
|---|---|---|---|---|
| Free | 757 | 6.6% | 1,291 | 6.5% |
| Ad valorem (a percentage) | 8,066 | 70.7% | 14,483 | 72.7% |
| Specific (an amount per unit) | 1,246 | 10.9% | 2,298 | 11.5% |
| Compound (a percentage plus an amount) | 1,270 | 11.1% | 1,507 | 7.6% |
| Other | 75 | 0.7% | 347 | 1.7% |
Which countries. General Note 3(b) of the same revision names them: Republic of Belarus, Cuba, North Korea, Russian Federation. Its text:
“(b) Rate of Duty Column 2. Notwithstanding any of the foregoing provisions of this note, the rates of duty shown in column 2 shall apply to products, whether imported directly or indirectly, of the following countries and areas pursuant to section 401 of the Tariff Classification Act of 1962, to section 231 or 257(e)(2) of the Trade Expansion Act of 1962, to section 404(a) of the Trade Act of 1974 or to any other applicable section of law, or to action taken by the President thereunder: 1/”
Footnote: “1/ See U.S. note 30, subchapter III, chapter 99 and heading 9903.90.08 for additional duty treatment.”
The General column
| General rate form | 8-digit lines | Share | Most-detailed rows | Share |
|---|---|---|---|---|
| Free | 4,315 | 37.8% | 7,343 | 36.9% |
| Ad valorem (a percentage) | 5,863 | 51.4% | 10,300 | 51.7% |
| Specific (an amount per unit) | 759 | 6.6% | 1,440 | 7.2% |
| Compound (a percentage plus an amount) | 397 | 3.5% | 520 | 2.6% |
| Other | 80 | 0.7% | 323 | 1.6% |
Of the 11,414 8-digit lines in chapters 01–97 of Revision 18 (2026), 1,236 (10.8%) carry a General rate that is neither Free nor a percentage: 759 specific, 397 compound and 80 other, such as a rate stated on part of the goods or a reference to another article's rate. Code that reads General rates as percentages cannot read those.
No line's General rate is blank once a row with a blank General is read as its line's rate. Every “other” General
text is listed, with its line count, in summary.json.
What the schedule prints that code has to handle
Each of these is stated as the schedule prints it.
Symbols General Note 3(c)(i) does not list
4 lines (7 most-detailed rows) list a symbol that General Note 3(c)(i) of the same revision does not: CA, J, J*. Each is inside a Free list that also names symbols the note does list. In the tables above, those lines count only under the symbols the note lists.
| Symbol | 8-digit line | Special text as printed |
|---|---|---|
CA |
1202.42.15 | Free (A*,BH,CA,CL,CO,D,E, IL,JO,KR,MA,OM,P,PA,PE,S, SG) |
J |
3903.30.00 | Free (A,AU,BH,CL,D,E,IL,J,JO,KR,MA,OM,P,PE,S,SG) |
J |
3921.12.19 | Free (A*,AU,B,BH,CL,CO,D,E,IL,J,JO,KR,MA,OM,P,PE,S,SG) |
J* |
3921.90.25 | Free (AU,BH,CL,E*,IL,J*,JO,KR,MA,OM,P,PE,S,SG) |
A Special rate equal to General, with no suspended marker
12 lines in heading
8704 (28
most-detailed rows) list KR at
25%, the same rate as their General column, with no “(s)”
marker (0 lines carry one). Each
prints the Special text shown under “How a Special text is written”. The lines:
8704.21.01, 8704.22.51, 8704.23.01, 8704.31.01, 8704.32.01, 8704.41.00, 8704.42.00, 8704.43.00, 8704.51.00, 8704.52.00, 8704.60.00, 8704.90.01. General Note 3(c)(iv) of the same revision reads:
“(iv) Whenever any rate of duty set forth in the "Special" subcolumn in chapters 1 to 98 is equal to or higher than, the corresponding rate of duty provided in the "General" subcolumn in such chapters, such rate of duty in the "Special" subcolumn shall be deleted; except that, if the rate of duty in the "Special" subcolumn is an intermediate stage in a series of staged rate reductions for that provision, such rate shall be treated as a suspended rate and shall be set forth in the "Special" subcolumn, followed by one or more symbols described above, and followed by an "s" in parentheses. If no rate of duty for which the article may be eligible is provided in the "Special" subcolumn for a particular provision in chapters 1 to 98, the rate of duty provided in the "General" subcolumn shall apply.”
One symbol printed twice
2908.91.00 prints L
twice in the same Free list, Free (A,AU,BH,CL,CO,D,E,IL,JO,L,KR,L,MA,OM,P,PA,PE,S,SG).
It is counted once.
The additionalDuties field
The export's additionalDuties field is empty on every record in chapters 01–97
(0 non-empty) and non-empty on
810 of the 35,804
records, all in chapter 99, of which
298 hold a single space. An empty
additionalDuties on a product line is not a statement that no additional duty applies.
Chapters 98 and 99, counted apart
They are in no figure above. Chapter 98 holds special classification provisions and chapter 99 temporary modifications and additional duties; their provisions cover goods that are also classified in chapters 01-97, so they are not counted beside product lines.
They also do not fit the line unit: of their 3,556 8-digit lines, 1,169 have no row carrying a General rate. Of the 2,387 rows that carry one, 1,480 read Free and 204 read “The duty provided in the applicable subheading”; another 48 read “The duty provided in the applicable subheading + 25%”.
Method
Source and release
USITC's keyless export, https://hts.usitc.gov/reststop/exportList?from=…&to=…&format=JSON|CSV&styles=false.
The export carries no revision field, so the release was read from https://hts.usitc.gov/reststop/currentRelease
immediately before () and after
() the pull, which ran from
to , and the two readings had to match. The release's date, start date
and status are its entry in https://hts.usitc.gov/reststop/releaseList.
The schedule was pulled twice: in JSON, in 14 chunks, and in CSV, in 13 chunks with different boundaries. The two pulls, 35,804 records each, matched record for record on 6 fields (HTS number, indent, description, General, Special and Column 2) once leading and trailing whitespace was trimmed.
Program symbols and names come only from General Note 3(c)(i), and the Column 2 countries only from General Note
3(b), of USITC's General Note 3 PDF requested by release name, fetched
: 45,465
bytes, 8 pages, SHA-256
7e6438e2025fc6b10ce18c2dbf15c2bad3e0a02b46ed7b00d5a7f0f1d1d62c58, running header
“Revision 18 (2026)” on every page. The PDF's text was decoded two
independent ways, and the two texts were identical.
Two units
An 8-digit line is a distinct first eight digits among numbered 8-digit and 10-digit rows: an 8-digit row and its 10-digit statistical suffix rows are one line. A most-detailed row is every 10-digit row, plus every 8-digit row with no 10-digit row under it. In chapters 01–97 there are 11,414 lines (and 11,414 rows carrying a General rate, one per line) and 19,926 most-detailed rows (19,831 10-digit rows and 95 8-digit rows without suffix rows; a walk of the leaves found 19,926), out of 23,193 numbered 8-digit and 10-digit rows. Rows under one line carry the same General, Special and Column 2 texts; that was checked on every line, not assumed.
Rate forms and Special texts
After collapsing whitespace: Free is the text “Free”; ad valorem is a number and
“%”, or a whole number and a fraction before “%”; specific is one money amount per unit, optionally
qualified; compound is parts joined by “+”, at least one an amount and at least one a percentage;
other is every other shape, subtyped and listed verbatim in summary.json. A Special text is
read as segments, each a rate followed by one parenthesized symbol list; a symbol list followed by “(s)” would mark a
suspended staged rate. Every symbol found is checked against General Note 3(c)(i), and a symbol the note does not
list is reported with its line, never counted under a program.
The export's traps, and how this run avoids them
Each is described in USITC's HTS Export API: Nine Traps in the Tariff Schedule Data.
| Trap | How this run avoids it | Evidence in this run |
|---|---|---|
to stops at the number as written |
Each chunk's to is the whole first heading of the next chunk; consecutive chunks must overlap row for row; the CSV pull uses different boundaries and must match the JSON pull. |
Every overlap matched in both pulls. Two earlier pulls stopped at this check and were not used. |
| Records with no HTS number | Never counted as lines, and required to carry no rate text. | 5,944 such records, 0 with rate text. |
| A blank General rate is not Free | Rates resolved two ways, by 8-digit prefix and by indent walk, and compared row by row. A blank never becomes Free. | 0 disagreements. |
| Row counts are not line counts | Two units, both reported. | See “Two units” above. |
| General is free text | Whitespace collapsed before comparing, raw text kept; forms defined by pattern and every other shape listed verbatim; no length cap. | Raw General text differs from its collapsed form on 273 lines. |
Chapter 99 rates are sentences; additionalDuties is empty |
Chapters 98 and 99 counted apart; an empty additionalDuties never read as “nothing applies”. |
See “The additionalDuties field” above. |
| Types drift, a key is misspelled, JSON arrives as a download | The body is parsed whatever the content type; the same keys are required on every record. | Served as application/octet-stream; addiitionalDuties non-null on 0 records. |
styles is required, and true returns markup |
Every request sends styles=false; no tag is allowed in any text field. |
0 records with markup. |
| The documented base URL answers with a web page | Only the export path is read; a body that is not a JSON array stops the run. | Every chunk parsed as JSON or CSV. |
Computed two ways
Each of these was computed two independent ways, and any disagreement stopped the measurement: the schedule (the JSON pull against the CSV pull); the line count (distinct prefixes against rows carrying a General rate); the most-detailed rows (the suffix set against a walk of the leaves); every row's rate texts (8-digit prefix against indent walk); every rate form (two classifiers, one of regular expressions and one a tokenizer); every Special text (two parsers, one of regular expressions and one a character scanner); and General Note 3 (two decodings).
Seen to fail, not only to pass. 76 fixture checks ran on both classifiers and both parsers, including shapes this revision does not contain, such as nested parentheses and a suspended rate; 0 failed. Then 4 copies of the data were broken on purpose (a blank General on an 8-digit row, a suffix row with a different rate, a partial row contradicting its line, a rate on a heading above the 8-digit level), and each stopped the measurement with the reason it exists to catch (4 of 4).
Against the Landed Cost API's schedule snapshot
The schedule snapshot bundled with our Landed Cost API, dated , matches this pull code for code: 11,414 lines, 23,193 rows, 19,926 most-detailed rows and 4,315 lines with a Free General rate in both; 0 codes only in the pull, 0 only in the snapshot, and 0 lines whose General text differs.
Load on USITC and WTO
One request at a time, each declaring the User-Agent
AervikLabs-research/1.0 (tariff schedule rate-column measurement; https://aerviklabs.com), with no retries.
116 requests were logged between
and , 104 to hts.usitc.gov and
12 to ttd.wto.org, including stopped and superseded runs; every one,
116, answered HTTP 200. The smallest gap between two request starts was
3,498 ms. Two earlier runs, of the probe step and of the WTO read, made
the same requests as their logged runs and are not in these counts; nor is the reading of the World Tariff Profiles
PDF.
hts.usitc.gov/robots.txt answered with the site's HTML page (text/html; charset=UTF-8), which holds no directives; ttd.wto.org/robots.txt has an empty Disallow for every agent.
Limitations
- One revision, one day. 2026HTSRev18, pulled . Counts change with every USITC revision.
- Unweighted. A line counts once whatever is imported under it. No trade values are used.
- Rates as printed. No ad valorem equivalents are estimated. Specific and compound rates are counted, not converted, and are left out of the Column 2 comparison.
- Text, not law. A program listed at Free says what the schedule prints for goods that meet that program's requirements. It says nothing about which goods or countries qualify, rules of origin, quotas, or whether a program or a country's designation is in effect.
- Chapters 98 and 99 are out of every headline. Nothing here reflects Section 301, Section 232, IEEPA or other additional duties, temporary suspensions, or the provisions in chapters 98 and 99 that Special references point to.
- No statement about any product's duty. Nothing here is the duty on a product or a shipment.
- Definitions. The rate forms are this study's patterns; every shape outside them is listed verbatim in the data.
- The WTO gap is not explained. See “The duty-free share depends on the unit”.
Downloads
- special-by-symbol.csv One row per program symbol in General Note 3(c)(i): the program, and the lines and most-detailed rows that list the symbol at Free, at a stated rate other than Free, or as a reference.
- by-chapter.csv One row per chapter: 8-digit lines by General rate form, lines with Special text, and Column 2 against General.
- summary.json Every figure on this page, the release and sources with read times, the General Note 3 text quoted, WTO's figure and method, the checks and the request counts. License and citation.
- README.txt Units, rate-form definitions, column definitions, method, load and limitations.
Free to use and redistribute, including commercially, with attribution under CC BY 4.0. If you publish something built on it, a link to this page gives readers the method and any later correction alongside the files.
Suggested citation
Aervik Labs. "The U.S. tariff schedule's three rate columns, measured (HTS Revision 18, 2026)." Measurement of the U.S. International Trade Commission's Harmonized Tariff Schedule export, release 2026HTSRev18, pulled 2026-09-15. https://aerviklabs.com/research/hts-rate-columns-2026-rev18/ (CC BY 4.0)
@misc{aervik_hts_rate_columns_2026_rev18,
author = {{Aervik Labs}},
title = {The {U.S.} tariff schedule's three rate columns, measured (HTS Revision 18, 2026)},
year = {2026},
howpublished = {Data set, CC BY 4.0},
note = {Measurement of the USITC Harmonized Tariff Schedule export, release 2026HTSRev18, pulled 2026-09-15},
url = {https://aerviklabs.com/research/hts-rate-columns-2026-rev18/}
}
About this research
Published by Aervik Labs, operated by EAC Ventures, LLC. Our Landed Cost API returns General (column 1) duty rates and does not apply Special or Column 2 rates, which is why these two columns matter to anyone calling it. For how much the General rate varies inside one 6-digit HS subheading, see Is the 6-Digit HS Code Enough to Estimate U.S. Duty?
Corrections: if a figure here is wrong, we fix it and say so, with the date. See About for how to report an error and who is accountable.