Original research · tariff classification
Six digits against CBP's own rulings
U.S. Customs and Border Protection publishes binding classification rulings: CBP's own description of a product, and the tariff number CBP assigned to it. That is ground truth we did not write and cannot influence. We sent 100 of those descriptions to our own HS classifier; 98 came back with an answer and 2 returned HTTP 503 with none. Of the 98 answered, it matched CBP's 6-digit subheading 23.5% of the time (23 of 98; 95% confidence interval 16.2–32.8%). Every miss is listed below, and the whole run is downloadable.
The result
| Agreement with CBP | Count | Share of 98 answered |
|---|---|---|
| Exact — same 6-digit subheading | 23 | 23.5% |
| Same 4-digit heading | 38 | 38.8% |
| Same 2-digit chapter | 58 | 59.2% |
The shape of the error matters more than the headline. Of the 75 misses, 35 landed in the correct chapter — the classifier usually knows what kind of thing it is looking at and then picks the wrong drawer within it. CBP's answer appeared among our returned alternate subheadings in 8 of the misses, so offering alternates recovers very little.
What the confidence score is actually worth
Each answer carries the model's own 0–1 confidence. It ranks — the mean was 0.817 when the answer was right and 0.618 when it was wrong — but it is badly calibrated: a 0.74 does not mean 74%.
| Confidence band | Answers | Correct | Share correct |
|---|---|---|---|
| 0.00 – 0.30 | 7 | 0 | 0% |
| 0.30 – 0.50 | 23 | 2 | 8.7% |
| 0.50 – 0.70 | 2 | 0 | 0% |
| 0.70 – 0.80 | 38 | 5 | 13.2% |
| 0.80 – 0.90 | 17 | 9 | 52.9% |
| 0.90 – 1.00 | 11 | 7 | 63.6% |
Correction, same day. This page first published at n=45 and reported that none of the 17 answers below 0.7 was correct — a clean "do not rely on this" line. At n=100 that is 2 of 32, and the band table shows the 0.70–0.80 group behaving almost like the low group rather than like the rest of the "confident" answers. The rule did not survive the larger sample, so it is withdrawn rather than restated. Nothing was built on it; it is corrected here, on the product page and on the free tool.
What a refuse-below-X rule would really do, computed over the 98 answered rows — the reason we did not ship one:
| Refuse below | Still answers | Of those, correct | Correct answers thrown away |
|---|---|---|---|
| 0.5 | 68 of 98 | 21 (30.9%) | 2 |
| 0.7 | 66 of 98 | 21 (31.8%) | 2 |
| 0.75 | 55 of 98 | 21 (38.2%) | 2 |
| 0.8 | 28 of 98 | 16 (57.1%) | 7 |
| 0.85 | 28 of 98 | 16 (57.1%) | 7 |
| 0.9 | 11 of 98 | 7 (63.6%) | 16 |
Even the best cut here answers a minority of cases and is still wrong more often than a buyer would expect. A threshold does not make this product safe; it only makes it quieter.
Where the error actually lives
The classifier proposes candidate subheadings and then picks one. In 67 of the 75 misses, CBP's code was not among the candidates we returned at all; in only 8 was it present and passed over. That points at candidate generation, not the choice step, as the place the accuracy is lost — so a better prompt at the choosing stage could address at most a small share of these cases. Stated as the inference it is: this study records the alternates we publish, not the full internal candidate list, so absence is consistent with never-retrieved rather than proof of it.
By CBP chapter, over the 98 answered rulings — thin per chapter, listed because the pattern is where any fix would start:
| CBP chapter | Rulings | We matched |
|---|---|---|
| 85 | 15 | 6 |
| 84 | 12 | 2 |
| 87 | 12 | 3 |
| 95 | 8 | 1 |
| 68 | 7 | 2 |
| 30 | 6 | 3 |
| 39 | 6 | 0 |
| 42 | 5 | 1 |
| 83 | 5 | 1 |
| 76 | 4 | 0 |
| 90 | 4 | 0 |
What we did, exactly
-
Frame, fixed before any result was seen. CROSS collection
ny, sorted newest first, subject beginning "The tariff classification of", exactly one tariff code of at least six digits. Rulings dated 2026-07-07 to 2026-08-14. -
The search API requires a search term, which could have selected the sample. It does
not:
a,theandofeach return the same total and the identical first five rulings, so the term is inert. Rulings were taken in date order, never chosen. - Only the merchandise description was used. A ruling prints its tariff number in the header and argues its way to it in the body, so the description was cut out between CBP's request sentence and the first line of its legal reasoning.
- Then a leak gate disqualified the ruling if that description still contained an HTS-shaped number, the words HTSUS, heading, subheading or classification, or the answer's own six digits. 47 rulings were dropped by that gate and none was edited to save it — editing is exactly where a leak would survive. Other drops: 91 whose subject was not a classification, 40 carrying more than one code, 21 where no description could be isolated.
- Each surviving description was sent once to the live product, and the 6-digit answer compared to CBP's. No retries, no second opinions, no prompt tuning between calls. Two calls returned HTTP 503 with no classification, and a call that returns no answer is not a wrong answer — so accuracy is computed over the 98 that answered, and these two are reported rather than counted as misses. One of them is the product working as designed: its model reply stopped at the output token limit, and this API refuses a cut-off reply rather than serving the partial answer inside it. The other never reached the model at all. Neither was retried, because the retry would have cost more than the approved budget had left.
Limitations, including the one that flatters us
- These are hard cases by construction. An importer requests a binding ruling precisely when the classification is unclear or contested. This set is therefore not a representative product catalog, and 23.5% should not be read as accuracy on ordinary merchandise. It is the most important caveat on this page and it cuts in our favour, which is why it is stated plainly rather than left for a reader to find.
- n = 98, and the interval is still wide: 16.2–32.8%. Per-chapter counts are thinner still and should be read as direction, not rate. This began as 45 rulings and was extended to 100 the same day; the first 45 were not re-run.
- The input is CBP's prose, not a merchant's product title. It is more detailed than what most users type, and in that respect easier than real traffic.
- One call per ruling. The model is not deterministic; a rerun would not reproduce every row exactly.
- 6 digits only. The product never returns 8 or 10 digits by design, so nothing here says anything about the U.S. tariff line, which is what an entry actually requires.
Every miss
All 100 rows, including the exact text the classifier was given and the two that returned no answer, are in results.csv. The 77 misses:
| Ruling | Merchandise | CBP | Ours | Conf. |
|---|---|---|---|---|
| N363472 | gas storage cylinders from Spain | 761300 |
731100 |
0.45 |
| N363464 | smoked quail eggs from South Korea | 210690 |
190190 |
0.72 |
| N363546 | a Nasal Atomizer Assembly from China | 901920 |
842420 |
0.65 |
| N363957 | kneepads from Vietnam | 401699 |
401512 |
0.75 |
| N363550 | dental loupes from Israel | 901890 |
900490 |
0.75 |
| N363841 | infrared heat shrink machine from Germany | 841989 |
847981 |
0.75 |
| N363613 | handmade decorative wall hanging from Poland | 630492 |
940690 |
0.25 |
| N363923 | a vibrating sound conversion device from China | 854370 |
847180 |
0.45 |
| N363416 | swivel casters from China | 830220 |
848210 |
0.45 |
| N363562 | a semiconductor photolithography wafer stage module from the Netherlands | 848640 |
848690 |
0.78 |
| N363892 | a mobile container carrier from China | 842890 |
842710 |
0.25 |
| N364050 | a concrete sprayer from Finland | 870590 |
870323 |
0.15 |
| N363803 | a crankshaft position sensor from Japan | 854370 |
854231 |
0.45 |
| N363447 | Halloween decorations from China | 950590 |
846721 |
0.15 |
| N363551 | paper cap from South Korea | 950590 |
650500 |
0.75 |
| N362998 | STERITALC® (talc) powder in dosage form, from France | 300490 |
300212 |
0.25 |
| N363956 | a tape measure from China | 901780 |
901720 |
0.95 |
| N363583 | hydronic boilers from Canada | 840310 |
840219 |
0.75 |
| N363531 | a costume from China and Vietnam | 950590 |
620311 |
0.35 |
| N363254 | a plastic rake from China | 392490 |
940370 |
0.15 |
| N362937 | Fosfomycin Tromethamine for oral solution in dosage form, from Mexico | 300420 |
300410 |
0.75 |
| N363845 | polyethylene glycol powder from Switzerland | 390729 |
390120 |
0.45 |
| N362938 | Progesterone Capsules in dosage form, from China | 300439 |
293723 |
0.85 |
| N363425 | a paper party decoration from China | 950590 |
670290 |
0.75 |
| N363777 | the Gabi System from Romania | 902920 |
847149 |
0.45 |
| N363473 | an Alpha Eagle from Italy | 843680 |
842641 |
0.75 |
| N363476 | a RoboMIDI and RoboMAX from Italy | 843680 |
870410 |
0.45 |
| N363287 | self-wound aluminum foil tape from China | 760719 |
481141 |
0.75 |
| N363820 | Dried Poppy Heads from the United Kingdom | 060490 |
120791 |
0.45 |
| N357749 | bearing steel balls from Japan | 848291 |
732611 |
0.75 |
| N363787 | a 2000 Subaru Impreza WRX STI from Japan | 870323 |
870324 |
0.75 |
| N363922 | a mobility scooter from China | 870390 |
850780 |
0.45 |
| N363316 | a control panel subassembly from Mexico | 853710 |
854390 |
0.72 |
| N363690 | a 2000 Nissan Skyline 25GT-X from Japan | 870323 |
870324 |
0.92 |
| N363389 | a fire resistant case from China | 420219 |
420292 |
0.75 |
| N362854 | steel decorative wall hangings from Zimbabwe | 830629 |
732620 |
0.72 |
| N363296 | a printed circuit board assembly from China | 851762 |
847330 |
0.72 |
| N363426 | a paper party decoration from China | 950590 |
491191 |
0.35 |
| N363645 | a side-by-side vehicle from Mexico | 870322 |
870340 |
0.85 |
| N363399 | a bellows from South Korea | 830790 |
830710 |
0.72 |
| N363173 | collectible miniature studio equipment from Belgium | 392640 |
970510 |
0.72 |
| N363697 | Frozen Salmon Teriyaki Meal from France | 160420 |
030481 |
0.45 |
| N362925 | a gas-line system from Canada | 848180 |
848130 |
0.65 |
| N361396 | a house slipper from China | 640520 |
640419 |
0.75 |
| N363385 | dog apparel from Russia | 420100 |
611090 |
0.45 |
| N363423 | polyethylene foam packaging inserts from China | 392390 |
390110 |
0.45 |
| N363308 | a motorized chassis from Canada | 870600 |
870880 |
0.45 |
| N363362 | “Treasure Guess” and “Full Throttle Axolotl” children’s games from China | 950490 |
950300 |
0.85 |
| N363283 | an electric motor for submersible wastewater pumps from Brazil | 850152 |
850153 |
0.92 |
| N363001 | the Turnout Remover and Carrier System from Australia | 842619 |
842612 |
0.85 |
| N362847 | a roof rack system from Germany | 870829 |
761090 |
0.75 |
| N362917 | a pre-install cable set from the Netherlands | 854470 |
900110 |
0.75 |
| N362921 | PET/Aluminum composite film from Germany | 760720 |
392062 |
0.72 |
| N362995 | a status light assembly from China | 853120 |
853400 |
0.75 |
| N363251 | the “huupe ARENA” system from China | 950450 |
852871 |
0.35 |
| N362772 | Indian-style dumplings from India | 190220 |
|
|
| N362974 | fermented black garlic bulbs from China | 200599 |
070320 |
0.35 |
| N362531 | a carry case from China | 420292 |
420212 |
0.85 |
| N363127 | Frozen Shrimp Spring Roll from Vietnam | 160529 |
190531 |
0.45 |
| N362836 | a plastic cartridge from China | 392690 |
844399 |
0.72 |
| N357263 | N-Phenyl-N-(trichloromethylsulfenyl)-benzenesulfonamide (CAS No. 2280-49-1) from China | 293590 |
293020 |
0.75 |
| N363339 | electrostatic discharge (ESD) suppressors from the Philippines | 853630 |
854160 |
0.35 |
| N363073 | Frozen Potato Shrimp from Vietnam | 160529 |
160521 |
0.85 |
| N362508 | semi-finished airbag inflator tubes from Germany | 870895 |
730459 |
0.72 |
| N362770 | a zinc alloy ring from the Netherlands | 850990 |
732611 |
0.35 |
| N358093 | Snowfall stone from Brazil | 680293 |
251690 |
0.92 |
| N355899 | Super Black stone from Brazil | 680299 |
251520 |
0.75 |
| N355895 | White Delicatus stone from Brazil | 680299 |
251520 |
0.75 |
| N362680 | wall mounted iron hanging sign brackets from Argentina | 830250 |
732599 |
0.72 |
| N362493 | a tote bag from Argentina | 420291 |
420221 |
0.85 |
| N362417 | a lock-valve spring retainer from South Korea | 840991 |
848190 |
0.35 |
| N362469 | aluminum cups from China | 761510 |
800700 |
0.75 |
| N362694 | an epoxy resin key chain making kit from China | 390730 |
390910 |
0.15 |
| N355231 | White Ice stone from Brazil | 680299 |
251520 |
0.72 |
| N355897 | Bahamas White stone from Brazil | 680299 |
680291 |
0.75 |
| N362825 | a load wheel assembly from China | 871690 |
848210 |
0.85 |
| N362453 | an aluminum automotive component from Mexico | 870829 |
|
Metadata correction, September 19, 2026. The machine-readable dataset description still described the initial 45-ruling sample after the study expanded. It now derives the attempted and answered counts from the same summary as this page. The benchmark results and earlier correction remain unchanged.
Run it yourself, against anything
- results.csv — every row, with the description given to the classifier
- summary.json — every figure on this page
- README.txt — method, licence and caveats in plain text
The descriptions and CBP's answers are public domain, so this test set works against any classifier, including ones that are not ours. A benchmark only its author can run is a brochure.
Source: U.S. Customs and Border Protection, Customs Rulings Online Search System, read 2026-09-17. CBP's Copyright Notice places its website information in the public domain and asks that CBP be cited as the source; it is. CBP did not participate in this study and does not endorse it. The product graded here is Aervik Labs' Landed Cost / HS Classifier, and the figures are what it returned on 2026-09-17.
Suggested citation
Cite the measurement date and this page; the method, limitations and dated corrections travel with the data.
Aervik Labs (2026). Six digits against CBP's own rulings [Data set]. Measured 2026-09-17. CC BY 4.0. https://aerviklabs.com/research/cross-six-digit-2026/
@misc{aervik_cross_six_digit_2026,
author = {{Aervik Labs}},
title = {Six digits against CBP's own rulings},
year = {2026},
howpublished = {Data set, CC BY 4.0},
note = {Historical classifier benchmark; 100 attempted rulings, 98 answered; measured 2026-09-17},
url = {https://aerviklabs.com/research/cross-six-digit-2026/}
}