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.
- 8dated changes on record for 9403.10.00
- 0expired measures for 9403.10.00 refused from its calendar
- 15WTO comment deadlines ahead for 0910.30
- 12,197records read across 5 sources looking for an end date
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 date | Change | Applies to | Basis |
|---|---|---|---|
| 2025-03-12 | (not stated)→Modified | 9903.85.68 | 2026HTSBasic |
| 2026-09-29 | rate not stated basis not stated (2026-15742, 2026-08-04)→rate not stated basis not stated (2026-20920, 2026-10-14) | 9403.10.00 | 2026-20920 · C-570-019 |
| 2026-09-29 | rate not stated basis not stated (2026-15742, 2026-08-04)→rate not stated basis not stated (2026-20920, 2026-10-14) | 9403.10.00.40 | 2026-20920 · C-570-019 |
| 2026-09-29 | 112.68% margin (2026-15470, 2026-07-31)→rate not stated basis not stated (2026-20920, 2026-10-14) | 9403.10.00.20 | 2026-20920 · A-570-018 |
| 2026-09-29 | rate not stated basis not stated (2026-15742, 2026-08-04)→rate not stated basis not stated (2026-20920, 2026-10-14) | 9403.10.00.20 | 2026-20920 · C-570-019 |
| 2026-09-29 | 112.68% margin (2026-15470, 2026-07-31)→rate not stated basis not stated (2026-20920, 2026-10-14) | 9403.10.00.40 | 2026-20920 · A-570-018 |
| 2026-09-29 | 112.68% margin (2026-15470, 2026-07-31)→rate not stated basis not stated (2026-20920, 2026-10-14) | 9403.10.00 | 2026-20920 · A-570-018 |
| 2026-10-14 | (not stated)→(not stated) | 9403.10.0040 | 2026-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.
| Deadline | Notification | Member | Source |
|---|---|---|---|
| 2026-11-14 | G/TBT/N/ARE/715 | Saudi Arabia, Kingdom of | document |
| 2026-11-14 | G/TBT/N/ARE/715 | Bahrain, Kingdom of | document |
| 2026-11-14 | G/TBT/N/ARE/715 | Kuwait, the State of | document |
| 2026-11-14 | G/TBT/N/ARE/715 | Oman | document |
| 2026-11-14 | G/TBT/N/ARE/715 | Qatar | document |
| 2026-11-14 | G/TBT/N/ARE/715 | United Arab Emirates | document |
| 2026-11-14 | G/TBT/N/ARE/715 | Yemen | document |
| 2026-11-15 | G/SPS/N/ARE/325 | Saudi Arabia, Kingdom of | document |
| 2026-11-15 | G/SPS/N/ARE/325 | Bahrain, Kingdom of | document |
| 2026-11-15 | G/SPS/N/ARE/325 | Kuwait, the State of | document |
| 2026-11-15 | G/SPS/N/ARE/325 | Oman | document |
| 2026-11-15 | G/SPS/N/ARE/325 | Qatar | document |
| 2026-11-15 | G/SPS/N/ARE/325 | United Arab Emirates | document |
| 2026-11-15 | G/SPS/N/ARE/325 | Yemen | document |
| 2026-12-29 | G/SPS/N/JPN/1435 | Japan | document |
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_daterather than a countdown. If a source ever starts publishing end dates, the state flips toend_dates_publishedand 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.