Docs / Guides / Bulk Classification
Bulk Classification
Upload a spreadsheet of products and get HS codes, duty rates, and confidence scores back in minutes.
How it works
Upload a CSV or paste data
Go to the Classify page and upload a CSV file, or paste rows directly. The system accepts any column order — it maps columns by name automatically.
Review the preflight check
Before submitting, you see a summary: how many rows were detected, which columns were mapped, and a warning if many rows have vague descriptions (short names without material or category context reduce accuracy).
AI classification runs
Each product is sent to the AI classifier. Results come back one batch at a time — you can watch the progress bar update live. Identical products use cached results to save credits.
Review and approve
Browse the results table. Each row shows the HS code, confidence score, and duty rates for EU, US, and UK. Rows needing review are highlighted. You can approve, manually edit, or re-classify individual rows.
Export
Download the full results as CSV to use in your ERP, customs software, or logistics platform.
CSV format
Dutiable accepts flexible CSV input. The only required column is a product name. All other columns improve classification accuracy but are optional.
| Column name(s) | Required | Description |
|---|---|---|
| productName, name, title | required | Product name used for classification. |
| sku | optional | Your internal SKU. Used as the catalog key. |
| description | optional | Detailed description. Improves accuracy significantly. |
| material | optional | Primary material (e.g. polycotton, ABS plastic). |
| category | optional | Product category (e.g. electronics, apparel, toys). |
| originCountry, countryOfOrigin | optional | Country of manufacture. Used for Section 301 risk warnings. |
| weight | optional | Product weight. Helps classify items where weight affects tariff heading. |
Column names are case-insensitive and can use spaces, underscores, or camelCase. For example, Country Of Origin, countryOfOrigin, and country_of_origin all map to the same field.
Example CSV
sku,productName,description,material,category,originCountry SKU-001,Wireless BT Headphones,Over-ear ANC headphones 30hr battery,plastic/silicone,electronics,China SKU-002,Cotton T-Shirt,Basic crew-neck tee,100% cotton,apparel,Bangladesh SKU-003,Ceramic Coffee Mug,12oz dishwasher-safe mug,ceramic,homeware,Portugal SKU-004,USB-C Cable 1m,,nylon braid + copper,,China
Improving accuracy
The AI classifier uses all available context to pick the most specific HS heading. Here is what makes the biggest difference:
Add material
High impactMany classification decisions hinge entirely on material. A bag can be Chapter 42 (leather), 63 (textile), or 39 (plastic). Always include material.
Add a description
High impactShort product names like "Cable" or "Widget" are ambiguous. A one-sentence description resolves most ambiguity at low cost.
Add category
Medium impactCategory narrows the search space before the AI starts. It also helps distinguish consumer from industrial goods.
Add origin country
Medium impactOrigin does not affect the HS code itself, but enables Section 301 and anti-dumping duty warnings for US-bound goods.
Vague description warning
If more than 30% of your rows have product names under 5 words and no description, material, or category, the preflight step shows a yellow warning. This does not block submission — it is a signal that the batch may have lower average confidence, and you may need to review more rows manually.
Credits
Each classified row costs 1 credit. Rows that return a cached result (same product classified recently) are free. The fromCache field in the results indicates whether a cached result was used.
Credits are deducted after the job completes, not when it is submitted. If a row fails to classify, it does not consume a credit.