Tariff change timeline & expiry calendar

For one HTS code: every dated Chapter 99 or trade-remedy rate change on record, what it moved from and to, the day it took effect, and a link to the notice it was read from — plus the WTO comment deadlines still ahead. Every row is a projection of a published source row; nothing here is inferred from prose.

Enter a code to look up its own history and calendar. The two blocks below are worked examples, each labelled with the code it shows, generated from the same corpus the lookup reads — so this page is useful before you type anything.

Worked example — history for 9403.10.00

Generated from the corpus at build time; the live lookup returns these same rows for this code.

Effective dateChangeApplies to Basis
2025-03-12(not stated)→Modified9903.85.682026HTSBasic
2026-09-29rate not stated basis not stated (2026-15742, 2026-08-04)→rate not stated basis not stated (2026-20920, 2026-10-14)9403.10.002026-20920 · C-570-019
2026-09-29rate not stated basis not stated (2026-15742, 2026-08-04)→rate not stated basis not stated (2026-20920, 2026-10-14)9403.10.00.402026-20920 · C-570-019
2026-09-29112.68% margin (2026-15470, 2026-07-31)→rate not stated basis not stated (2026-20920, 2026-10-14)9403.10.00.202026-20920 · A-570-018
2026-09-29rate not stated basis not stated (2026-15742, 2026-08-04)→rate not stated basis not stated (2026-20920, 2026-10-14)9403.10.00.202026-20920 · C-570-019
2026-09-29112.68% margin (2026-15470, 2026-07-31)→rate not stated basis not stated (2026-20920, 2026-10-14)9403.10.00.402026-20920 · A-570-018
2026-09-29112.68% margin (2026-15470, 2026-07-31)→rate not stated basis not stated (2026-20920, 2026-10-14)9403.10.002026-20920 · A-570-018
2026-10-14(not stated)→(not stated)9403.10.00402026-20920

Worked example — next WTO comment deadlines for 0910.30

A different code, because the two lanes hold different things: no measure in this corpus carries a future effective date, so the calendar's only forward-dated lane today is WTO comment windows. Comment windows are not rate changes and are never merged with them — a deadline to comment on a notified measure is a different fact from a duty taking effect.

DeadlineNotificationMember Source
2026-11-14G/TBT/N/ARE/715Saudi Arabia, Kingdom ofdocument
2026-11-14G/TBT/N/ARE/715Bahrain, Kingdom ofdocument
2026-11-14G/TBT/N/ARE/715Kuwait, the State ofdocument
2026-11-14G/TBT/N/ARE/715Omandocument
2026-11-14G/TBT/N/ARE/715Qatardocument
2026-11-14G/TBT/N/ARE/715United Arab Emiratesdocument
2026-11-14G/TBT/N/ARE/715Yemendocument
2026-11-15G/SPS/N/ARE/325Saudi Arabia, Kingdom ofdocument
2026-11-15G/SPS/N/ARE/325Bahrain, Kingdom ofdocument
2026-11-15G/SPS/N/ARE/325Kuwait, the State ofdocument
2026-11-15G/SPS/N/ARE/325Omandocument
2026-11-15G/SPS/N/ARE/325Qatardocument
2026-11-15G/SPS/N/ARE/325United Arab Emiratesdocument
2026-11-15G/SPS/N/ARE/325Yemendocument
2026-12-29G/SPS/N/JPN/1435Japandocument

What this tool can and cannot tell you

  • Chapter 99 and trade remedies replay. Column 1 / Column 2 base rates do not. The ledgers behind this page carry Chapter 99 measures and trade-remedy actions only. If a base rate changed and no Chapter 99 measure touched it, it is absent here. Every answer prints the lanes it read (alerts-history-backfill.json (824 dated rows), alerts-rate-change-1109.json (114 dated rows)), so the gap travels with the answer instead of living in a footnote.
  • No measure publishes an end date. 12,197 records across 5 sources were read at build time and 0 carries one. The calendar prints the state no_published_end_date rather than a countdown. If a source ever starts publishing end dates, the state flips to end_dates_published and a gate arm proves the flip is observable.
  • Chapter 99 headings are joined to your code only where the scope can be proved. Of 557 headings named by the ledgers, 43 are mounted to a product line by an engine on this host; the rest abstain by name rather than being silently read as “not applicable”.
  • An empty answer names its own reason. The lookup below returns one of three distinct empty states, never a blank.

The three empty states, spelled out

Measured on the current corpus: 9201.10.00 answers CODE_NOT_IN_ANY_LANE — the code is in no lane at all.

CODE_NOT_IN_ANY_LANE
No change record on this site mentions the code. The history is empty because the code is not covered — not because it never changed.
NO_EVENTS_ON_RECORD
A lane covers the code but holds no dated change for it.
NO_FUTURE_MEASURE_ON_RECORD
The code has a dated history but nothing in the corpus is dated after today, so the calendar lane is empty.
INVALID_CODE
The input was not shaped like an HTS code; refused rather than guessed at.

Why the value is in the citations

A timeline is trivial to make look convincing: pad it with plausible rows, or shift a date. What makes this one usable for a customs file is that every line resolves to one row of a file we publish — a Federal Register document number, a USITC change-record release, a WTO document symbol — and that a machine gate re-derives the expected event set from the raw files and fails if a single real change is missing, if an invented one appears, or if a measure dated in the future is shown as history.

Frequently asked questions

How do I find out when my HS code's tariff rate changed?

Enter the code above. The timeline lists every dated change on record for that code or a parent line it inherits from, each with the date it took effect, the value before and after, and a link to the Federal Register notice or USITC change-record row the event was read from. Measured on the current corpus, 9403.10.00 carries 8 such events.

Does this cover Column 1 and Column 2 base rate changes?

No, and the page says so rather than implying otherwise. The replay covers Chapter 99 measures and trade-remedy actions, which are the layers that change most often. Base Column 1 and Column 2 rate history is not in the corpus, so a base rate that changed is absent from this timeline. Every response prints the lanes it read so the gap is visible on the answer itself.

When does a tariff measure expire?

No source this tool reads publishes an end date: measured on the current corpus, 12,197 records across 5 sources were read and 0 carries an end date. The calendar therefore prints the named state no_published_end_date instead of a countdown, and prints the number of sources read so the claim can be re-run. A date nobody published would be a forecast sold as a fact.

What does an empty timeline mean?

One of three different things, and the answer names which: CODE_NOT_IN_ANY_LANE means no change record on this site mentions the code, so the emptiness is a coverage fact; NO_EVENTS_ON_RECORD means a lane covers the code but holds no dated change for it; INVALID_CODE means the input was not shaped like an HTS code. Collapsing those into one blank answer is how a coverage gap gets mistaken for a quiet code.

Where does the data come from?

Two local change ledgers mined from the USITC HTS change record and Federal Register notices, the Federal Register notice stream itself, and WTO ePing notifications for comment deadlines. Every row on the page links to its own source, and the current corpus holds 15 future comment deadlines for 0910.30 alone.