TariffWolf Logo TariffWolf

The Day I Realized the Importance of Correct Tariff Classification

June 15, 2026 11 min read Blog
A tariff classifier's 3 a.m. mistake cost a client a CBSA penalty. Five years later, it shaped TariffWolf—a human-in-the-loop HS classification engine. Here's the full story.

It was 3 a.m., and I was about to cost a client more money than I earned in a year. I just didn’t know it yet.

Let me take you back.

The Night Everything Looked Fine

I had been a tariff classifier for barely three or four months. Like most of my colleagues, I was working on the account of one of the industry’s leading e-commerce shipping solutions – high volume, fast turnaround, the kind of work where a queue of products never really empties. That night I was on the graveyard shift, alone with my screen and a steadily cooling cup of black coffee.

Make that three or four cups. None of them worked.

My eyes kept closing on their own. I would catch my head dropping, jerk awake, and push another product through. I was classifying on muscle memory, the way you drive a familiar road without remembering the turns. A product landed in my queue, and I tagged it under heading 9306. A little later, another one – and I tagged that under heading 0305, destination Canada.

I clocked out at sunrise, drove home, and slept the sleep of someone who had finished his shift. I had no idea that two small entries were quietly travelling toward the Canada Border Services Agency.

The Morning the Floor Went Quiet

A few days later I rotated from nights to days. Same desk, same coffee, different light.

Then the floor changed temperature.

The Senior Operations Manager came out of his cabin and screamed. Not a raised voice – a scream, the kind that makes thirty people stop typing at the same instant. The client had been penalized. Heavily. For misclassifying a commodity. I was new enough that I didn’t even understand what was happening; I only understood that something had gone very wrong, and that the air in the room had turned to glass.

Half an hour later, my name was called. Come to the cabin.

I will be honest: my legs were not entirely under my control when I walked in. The Senior Manager’s mood from the floor had followed him inside. And he wasn’t alone. The Managing Director was sitting there. So was the Training Manager. Three people, one chair, and me in it.

He turned his laptop toward me.

“What’s the HS code for this?” A leather men’s wallet, printed with a bullet design.

“Heading 4202,” I said.

“And this one?” A pack of mixed dried seafood.

0305,” I answered.

And in that exact second, somewhere in the back of my sleep-starved memory, a quiet alarm started ringing. I have classified these before. I just couldn’t place where. I couldn’t remember that night.

What followed, I remember word for word.

MD: “Are you serious?”

Senior Manager: “Did you ever read the product description?”

Training Manager: “Why did you classify this under the wrong chapter?”

My throat was dry. I managed to say:

Me: “Sorry… I mean – what was the wrong classification?”

Senior Manager: “Why did you put a wallet in Chapter 93? Do you have any idea what gets classified under Chapter 93?”

Me: “Sorry, sir. Chapter 93 is Arms and Ammunition.”

A leather wallet – because it carried a bullet print – had gone in next to live ammunition. Heading 9306. Cartridges and projectiles. Not 4202, where wallets belong.

Senior Manager: “And why did you put this seafood in Chapter 03 – when the packaging clearly says processed food for cats and dogs?”

I had not read the packaging. Not the part that mattered. Dried seafood put up as pet food is not Chapter 3 fish for the dinner table. It is heading 2309 – preparations of a kind used in animal feeding – and more precisely, 2309.10, dog or cat food put up for retail sale. I had seen the words “dried” and “seafood” and stopped reading.

I said the only true thing I could say.

Me: “Sorry, sir. I did not read the package label in detail. I will not repeat this mistake.”

The MD gave me a verbal warning, told me to leave, and asked me to stay focused during classification. Later, my trainer and mentor told me the rest: the client had been heavily penalized by the CBSA. Two careless entries. One sleepy night. A bill that someone else had to pay.

That was the day I understood – not as a definition in a manual, but in my stomach – that a tariff code is not a label. It’s a legal declaration. And the gap between the right chapter and the wrong one can be the difference between a clean clearance and a penalty notice.

Why Did the Mistake Actually Happen?

Let me not hide behind the story. The first thing I owe you is the honest part.

I was careless. Both products told me everything I needed to know – I just didn’t look.

The leather wallet listing had three images. The first one showed four bullets and nothing else; no wallet in frame at all. The wallet itself was in the second image, which I never opened. So my eyes caught “bullet,” my hand caught 9306, and I moved on.

The cat-and-dog food was the same failure in a different shape. The line that mattered – for cats and dogs – was printed at the bottom of the package. To read it, you had to zoom into the product image. I didn’t zoom. So I never knew it was pet food at all.

Now I’m going to tell you something that will sound like an excuse. It partly is – but it’s also the real mechanism, and that matters more than my pride.

Our daily target was 300 classifications a day. At that pace, no classifier – me or anyone else – had the time to open every image, zoom into every label, and dig through every product the way the rules deserve. And I was doing it at 3 a.m. on a night shift, with a deadline pulling at me the whole time.

That is not a character flaw unique to me. It is human. We get tired. We trust a keyword. We rush to finish before the clock runs out. Give a careful person 300 products and a sleepless night, and somewhere in that pile, two of them will slip past. The system was built to produce the exact mistake I made.

That realization is the seed of everything that came next.

Five Years Later – The Machine Made My Mistake

Hello, by the way. My name is Surajit Roy, Co-Founder of TariffWolf.

I left that organization a long time ago. The wallet and the cat food, though, never quite left me.

So when we were building our own classification engine, I did something a little personal. I dug those two exact items out of memory and fed them to the AI. A test. A small private reckoning.

The wallet, it handled. But the second item – the processed seafood for cats and dogs – the AI classified it as fish.

The same mistake I made at 3 a.m. with four coffees in me. Except the machine wasn’t tired. It hadn’t skipped breakfast. It had the entire Nomenclature available to it. And it still reached for the word “seafood” and walked straight past “for cats and dogs.”

Why?

After a lot of study and R&D, I had my answer. A language model classifies by finding the most plausible-sounding answer, not the legally correct one. It pattern-matches. It sees “dried seafood” and gravitates to Chapter 3 because, statistically, that is where dried seafood usually lives. It does not reason through Chapter 23’s exclusion the way a trained classifier does. It is not deterministic. It is persuasive.

So we got to work on the gap. We sat with our ML and AI training team and started normalizing the user input – teaching the system how to read a messy, real-world product description before it ever reaches for a code, the way a human classifier mentally cleans up a sloppy listing. We fed it the kinds of descriptions that break ordinary tools. And after a long stretch of iteration, the engine reached 98.14% quality in HS hint generation.

But here is the part I want you to hold on to: in our trade, persuasive and correct are not the same thing. The CBSA does not penalize you for an answer that sounded right. Even at 98.14%, that remaining sliver is exactly where the expensive mistakes live.

Download the internal HS Hint Classification Audit Report.

Enter your details, and we will email you the report.

What Actually Makes the Engine Sharp

Most automated classifiers are trained on clean, easy cases – the products that were never going to be misclassified anyway. That’s how you get an impressive demo and a penalty notice in production.

We trained TariffWolf the other way around.

I have personally classified close to one million commodities across my career – and I’m still counting. My fellow expert classifiers carry their own deep tally. Between us, we have seen the wallet-that-reads-as-a-bullet a thousand times over. So when we train the engine, we don’t feed it the obvious goods. We feed it the corner cases: the contested classifications, the keyword traps, the listings where the deciding fact is buried at the bottom of the third image.

The engine learns most intensely from exactly the places where errors actually cluster – because that is where our human experience is concentrated. The tool isn’t smart because it read the Nomenclature. It’s smart because it was trained by people who have been burned by it.

Why We Built TariffWolf as Human-in-the-Loop

That 3 a.m. lesson is the reason TariffWolf is not a “click here, get your HS code” black box.

We built a human-in-the-loop bulk classification engine. The distinction is the whole philosophy: the technology is not the authority. It is the assistant.

Here is what that means in practice. When you are classifying thousands of SKUs – the e-commerce reality I came from – the bottleneck is time, and machines are extraordinary at time. TariffWolf reads descriptions, surfaces candidate headings, flags the GRI path, and pulls the relevant Section and Chapter Notes for every line at a speed no human team can match. It does the heavy lifting, and it does it tirelessly.

But it does not get the final word. A human classifier does. The engine narrows the field and shows its reasoning; the person confirms, corrects, or overrules. The machine handles the volume; the human owns the judgment. The wallet-in-Chapter-93 moment, the cat-food-isn’t-fish moment – those are exactly the calls we keep in human hands, with the AI doing everything around them so the human has the attention to spare.

If I’d had that system on my night shift, the engine would have flagged “for cats and dogs” on the label and routed me toward Chapter 23 instead of letting a tired brain coast on a keyword. The client would have been spared a penalty. And I would have been spared the worst cabin meeting of my early career.

See TariffWolf in action — book a 1-hour walkthrough

Pick a time on the calendar that loads next — no email back-and-forth.

The Math: Where the Speed Actually Comes From

People hear “we keep a human in the loop” and assume that cancels out the speed. It doesn’t. Let me show you with simple arithmetic.

Say you have 10,000 lines to classify.

First, run them through TariffWolf. The engine classifies all 10,000 lines in roughly 15 minutes. Then a human expert reviews the output – and reviewing a proposed classification is far faster than building one from scratch.

Now bring in the quality. The system runs at 98.14%, but let’s be deliberately conservative and discount it hard – call it ~90% effective in real, messy production. That means roughly 9,000 lines come back correctly classified, needing only a confirming glance. Your expert’s real work shrinks to the remaining ~1,000 lines – the genuinely hard ones that deserve human reasoning anyway.

That is the whole proposition. You didn’t trade accuracy for speed. The machine collapsed the hours on the 9,000 routine lines so your expert could spend their attention on the 1,000 that actually carry the risk. Reduce the time. Never outsource the judgment.

I learned that lesson at 3 a.m. with cold coffee and a screaming floor. You don’t have to.


Surajit Roy is Co-Founder of TariffWolf – a human-in-the-loop bulk HS classification engine trained on real-world corner cases by classifiers with hands-on experience across nearly a million commodities. Built for customs brokers, e-commerce shippers, and trade compliance teams who need to classify at scale without surrendering the final call to a machine.

Share: