Every rate here is a claim a customs professional may check against the official source. This page says how each one is produced, how it is verified, and where the gaps are. The gaps are listed because a tool that hides them is harder to trust, not easier.
Where the numbers come from
Column 1 rates are parsed from the machine-readable Harmonized Tariff Schedule published by the US International Trade Commission, revision 2026HTSRev17. About 98 percent of the schedule parses. The rest is genuinely non-formulaic, phrased as cross-references such as “the rate applicable to each garment in the ensemble if separately entered”. Those are recorded as unavailable rather than guessed at, and a page will say a rate is unavailable rather than show a number we invented.
Trade-remedy duties under Sections 232, 301 and 338 are entered from the proclamations and Federal Register notices that impose them, and cross-checked against the Chapter 99 text in the schedule. Where the two agree, a layer is recorded as cross-source verified. The 60-economy Section 301 forced-labour action was verified twice independently, once from the Federal Register annex and once from the Chapter 99 export, and the two agree on every economy, heading assignment and tier.
Three things commonly got wrong
The schedule is not evidence a duty is in force
Chapter 99 keeps a heading after the action behind it stops being collected. Revision 17 still prints the IEEPA headings, including a full reciprocal rate ladder, months after the Supreme Court held that statute does not authorise tariffs. A pipeline that ingested Chapter 99 and published what it found would publish dead tariffs as live. So the schedule supplies scope and rate; a separately sourced status table supplies the window each action was actually collected in.
Chapter 99 headings are not uniformly additive
Of the 629 heading 9903 lines in the current revision, 240 add to the Column 1 rate, 226 add nothing, and 94 print a bare rate that applies in lieu of the Column 1 rate under U.S. note 1 to subchapter III. Several Section 232 derivative headings work this way, charging a flat floor rather than an addition. Treating those as additive overstates the duty on every affected line.
Some duties cap rather than add
Five economies under the 2026 Section 301 forced-labour action are implemented as paired headings. For Japan, heading 9903.05.48 covers articles whose Column 1 rate is already at or above 12.5 percent and adds nothing; 9903.05.49 covers articles below that threshold and charges a flat 12.5 percent in place of the Column 1 rate. The European Union, South Korea, Switzerland and Taiwan work the same way. The effect is a cap on the combined duty, not a surcharge on top of it.
How duties combine
The default is that they add, each computed against the same customs value. There is no compounding and no general precedence to derive. Every exception is a specific documented pair, not a principle: Executive Order 14289 makes the Section 232 auto action displace the Section 232 steel and aluminium actions, for instance, and that rule is encoded with the notice that created it. A rule without a citation fails our test suite and cannot ship.
A trade agreement claim replaces the Column 1 rate and nothing else. It does not by itself remove a Section 232, 301 or AD/CVD duty, which are assessed on origin and content rather than on preference eligibility.
Verification
- The rules engine is covered by a test suite that must pass before anything ships.
- Every stacking rule carries a citation, enforced at runtime: an uncited rule throws.
- Nothing reaches a public page without a verification date, enforced by a database constraint rather than by remembering to check.
- Extractions that fail verification are quarantined and are unreadable by any client key, so a quarantined figure cannot render publicly even by mistake.
- Census import statistics carry their own calculated duty, which gives an independent third check: Japanese steel under heading 7208 shows duty at exactly 50 percent of customs value, matching the Section 232 rate.
What this does not cover yet
- Section 301 China list membership. The lists are published as annexes we have not ingested, so the China list duties are not applied per code. Pages do not claim they are.
- AD/CVD orders. Not covered. There is no reliable machine-readable source for them; the one public API is dead and the current portal is a browser application with no JSON interface.
- Whether the China lists remain in force. The second statutory four-year review is running and its continuation deadlines passed without a notice being published. The duties are very likely still collectible, but we cannot cite a document saying so, so the affected pages carry that caveat rather than an unqualified figure.
- The non-stacking framework after February 2026. Executive Order 14289 and the CBP guidance implementing it both predate the ruling, and CBP’s own chart still lists IEEPA columns for programmes that no longer exist. No superseding document has been published. We encode the order as written; the legs that referenced IEEPA actions simply never fire, because no IEEPA layer is in force to trigger them.
- Fee caps. The merchandise processing fee has an annually adjusted minimum and maximum that we have not confirmed from the primary notice, so we compute the ad valorem component and say the cap has not been applied rather than using a figure from a trade publication.
- Rate limiting on the public API is per instance rather than global. It bounds one client hammering a route; it is not a security control.
Dates
Tariff actions take effect for goods “entered for consumption, or withdrawn from warehouse for consumption, on or after 12:01 a.m. eastern time” on a stated date. The operative event is entry for consumption, not arrival and not export. In-transit exceptions are drafted per action and are never assumed. Validity is stored as a half-open interval so that a superseding rate begins exactly where its predecessor ends, with neither a gap nor an overlap.
Corrections
If you believe a rate here is wrong, write to conor@attoscale.io with the page and the source you are comparing against. Corrections are published to the changelog with the document behind them.
Tariff Watch