Short answer: refresh duty rates whenever the tariff changes, and check for changes on a fixed cadence: monthly for the EU and UK combined nomenclature and duty suspensions, immediately when a trade measure affecting your categories is announced. A landed-cost model running on last quarter's rates is a pricing model running on fiction. The refresh is cheap; the stale rate is expensive.
How fast duty rates actually move
The EU updates its Combined Nomenclature annually, with the new version applying from January 1, and publishes amendments, suspensions, and quotas throughout the year. The UK updates the Global Tariff on its own schedule. On top of the scheduled changes come the unscheduled ones: anti-dumping duties imposed after investigations, safeguard measures, retaliatory tariffs, and suspensions granted or withdrawn. Any of these can change the duty on your hero SKU with weeks of notice or less.
Most brands update their rates when someone remembers, which usually means after a surprise. The surprise arrives as a broker invoice higher than the model predicted, a margin report that does not reconcile, or a customer charged the wrong DDP total. Each of these is a rate-refresh failure wearing a different costume.
A practical refresh cadence
Monthly is the right default for active EU and UK sellers: pull the current rates for your top classifications, check for new measures affecting your chapters, and log the check. Quarterly, do the deeper pass: revalidate the full classification list, confirm suspensions and quotas you rely on are still in force, and update the annual nomenclature version when it publishes. Immediately, out of cycle, when a trade announcement touches your products: new investigations, new duties, new exclusions.
Automate the mechanical part. The EU's TARIC database and the UK Trade Tariff are both queryable, and a scheduled pull of your classification list against them turns the monthly check into a diff review instead of a research project. The human work is the judgment: does this change affect our products, and does pricing need to move?
Connecting the refresh to pricing
A rate change only matters if it reaches the price. Tie the refresh to a pricing review trigger: any rate change above a threshold, say two percentage points on a hero SKU, generates a pricing ticket. Below the threshold, the model absorbs it and the log records it. This keeps the refresh from becoming noise while ensuring material changes never sit in a spreadsheet unread.
Version your rates like code. Every landed-cost calculation should record which rate table it used, so a margin question from March can be answered with March's rates, not today's. Stale rates are inevitable in hindsight; untraceable rates are a choice.
The cheapest way to start is a spreadsheet with three columns: classification, current rate, and rate-as-of date. When the as-of date goes stale, the row turns red. It is not glamorous, but it beats discovering the staleness in a margin review.
And when a rate change does move pricing, tell the customer why. A DDP total that rises because a duty changed is explainable; a total that rises for no stated reason looks like gouging. The refresh cadence gives you the fact to point at.
Who should own the rate refresh?
Whoever owns pricing, with support from whoever owns customs data. The refresh is a pricing input, not a compliance chore, so it belongs with the team that feels the margin impact. Compliance validates the classifications; pricing owns the calendar.
Do we need to refresh rates for low-volume SKUs too?
On the monthly cadence, no; the annual and event-driven passes cover them. But every SKU in the model should carry a rate-as-of date, so you always know how stale any number is. Unknown staleness is worse than known staleness.