Batch Tariff Calculator: Price a Whole Spreadsheet of SKUs (Excel/CSV)
Invoice × Tariff editorial
Who this is forSellers, sourcing agents and ops teams who need to price a whole catalog or purchase order in one pass — no code required.
Download the XLSX or CSV template, fill one row per SKU (SKU, Description, HTS, Value USD, Net weight kg, Qty, Freight share USD), upload it, fix any flagged rows inline, then calculate and export the results as XLSX. Parsing and math run entirely in your browser — up to 200 rows per file, five files a day.
What batch mode does
The batch calculator runs the same stacked-duty engine as the web calculator — MFN, China 301, the global 301 program, Section 232, MPF/HMF — across a whole spreadsheet instead of one SKU at a time. You upload an Excel or CSV file; parsing, validation and math all happen inside your browser. The file is never uploaded anywhere.
Per-row limits keep it planning-grade: 200 rows per file, and the browser counts up to 5 files per day locally (clearing site data resets it; there's a waitlist if you need more volume).
Step 1: get the template
On the batch page, download the XLSX or CSV template. The template carries seven columns:
| Column | What goes in it |
|---|---|
| SKU | Your own item code — any text, it just travels with the row |
| Description | Product name in English or Chinese; not sent anywhere, only echoed back in results |
| HTS | 8-digit code; a 10-digit code also works (the engine reads the leading 8) |
| Value USD | Declared value of the whole line, not the unit price |
| Net weight kg | Net weight — only required for specific/compound-duty codes (see below) |
| Qty | Units per line, positive whole number |
| Freight share USD | The freight attributable to this line (informational; duties are computed on value) |
Step 2: fill it correctly
Three columns cause almost all upload errors, so worth 30 seconds each:
- Value USD is the line total. A row of 5,000 tees at $4.00 each goes in as
20000. The tool deliberately does not map a "unit price" column from your own files — unit price ≠ declared value, and guessing that mapping would silently misprice every row. - Net weight is the net weight. Existing files with a "gross weight" column are deliberately not mapped either: gross ≠ net, and specific/compound duty codes (screws at "9% + 0.5¢/kg", for example) compute on net kilograms. Those rows show a clear error until net weight is filled; plain ad-valorem codes don't need weight at all.
- HTS needs the digits.
6109.10.00,61091000and6109100010all work — punctuation is stripped and 10-digit codes are truncated to the 8-digit engine key.
Here's the engine's reference case — 5,000 cotton tees, $20,000 declared, China origin by sea — recomputed live on the current snapshot:
| HTS 6109.10.00 · origin CN · $20,000.00 · ocean formal entry · 5,000 units | Rate | Amount |
|---|---|---|
| Base duty (MFN) HTS Column 1 general rate · source | 16.5% | $3,300.00 |
| China Section 301 (List 4A) Trade Act 1974 §301 (USTR action, 9903.88.01 series) · source | 7.5% | $1,500.00 |
| Global Section 301 (CN, 12.5% tier) Trade Act 1974 §301 (global forced-labor program; FR 2026-15181 §1(a)(iii)) · source | 12.5% | $2,500.00 |
| Harbor Maintenance Fee (HMF) fee, not a duty · charged on the same value | 0.125% | $25.00 |
| Merchandise Processing Fee (MPF) fee, not a duty · charged on the same value | 0.3464% (once per entry, min $34.58 / max $670.86) | $69.28 |
| Total duties + fees owed to CBP | $7,394.28 | |
| Effective tariff rate (duties + fees ÷ customs value) | 36.97% | |
| Duties + fees per unit | $1.48 |
Computed live from ruleset v0.3.4 (data as of 2026-10-07, entry date 2026-10-07). Each row's verification status is shown on the HTS 6109.10.00 page; estimates only, not customs advice.
Step 3: upload your own file (no template? fine)
Already have a cost sheet? Upload it as-is. The parser matches columns by header text, accepting both the template's English names and common variants in English and Chinese — "HTS code", "HS 编码", "申报价值 USD", "净重(kg)", "件数/Qty", and dozens more aliases. Headers must be in row 1; unrecognized columns are ignored, and anything ambiguous is shown as a mapping summary you can check before calculating. The two deliberate non-mappings above (unit price, gross weight) stay non-mapped — fill those cells by hand if the rates need them.
Step 4: fix flagged rows inline
After parsing you get a row-by-row check instead of a failed import:
- HTS not found in local library — the bundled engine covers curated high-frequency codes; check the full table on the HTS search page
- Value must be > 0 / Qty must be a positive integer
- Specific/compound HTS — net weight required
- Empty rows are skipped, and every fix is editable right there in the results grid — no round-trip to Excel needed.
Step 5: choose the shipment scope (this one changes your fees)
MPF and HMF are entry fees, not product fees, so the tool asks how your shipment actually clears:
- All SKUs on one entry — MPF/HMF charged once on the combined value. This is one consolidated customs entry: correct when your SKUs travel together under one entry.
- Each SKU entered separately — every row gets its own MPF including the minimum (about $33.58 in the current fee schedule). This is the conservative reading when each SKU clears on its own entry.
Pick wrong and per-row results shift by the MPF minimum — for a 200-row sheet that's real money, so the page asks you to confirm the scope explicitly. Transport mode is chosen once for the whole shipment (sea lanes also pick up HMF; air doesn't).
Step 6: read the results and export
Each computed row shows total duty & fees, landed total, and landed cost per unit; a totals line summarizes duties + fees for the sheet. In consolidated scope, row duties exclude the entry fees — they're shown once on the totals row, matching how CBP bills a consolidated entry.
Export XLSX results writes your original columns plus the result columns and the ruleset_version that produced them. Keep that version column: when rates change next month, the export is your proof of which rules each quote used.
Limits worth knowing
- Destination is fixed to the U.S. full regime — this is a US import tool.
- 200 rows per file; larger sheets should be split (the tool tells you if extra rows were dropped).
- Results carry the version and disclaimer;
sample/unverifiedrate lines are planning-grade — your customs broker signs the actual entry.
Frequently asked questions
- Is my spreadsheet uploaded to a server?
- No. Parsing, validation and the duty math all run in your browser with the same bundled engine as the on-site calculator. The file never leaves your machine; only the language preference cookie exists server-side.
- Why won't my file's unit price column map to Value USD?
- Deliberate safety design: unit price is not the declared value of the line, and auto-mapping it would misprice every row silently. Enter the line total (unit price × qty) in the Value USD column — the template makes this unambiguous.
- Which rows need net weight?
- Only codes with specific or compound duty rates (a per-kilogram component), such as steel screws at '9% + 0.5¢/kg'. Pure ad-valorem codes ignore the weight column. The tool flags exactly which rows need it after parsing.
- Should SKUs be one entry or separate entries?
- Match how the goods actually clear customs. If all SKUs travel together under one consolidated entry, choose the consolidated scope so MPF/HMF is charged once on the total value. If each SKU clears separately, choose per-row — each then pays its own MPF including the minimum. When in doubt, ask your broker which entry structure they'll file.
- I need more than 200 rows or more than 5 files a day.
- Split the sheet and spread uploads across days, or join the API waitlist for higher-volume access. The daily counter lives in your own browser and resets when you clear site data.
Free, no sign-up. Template download and upload are on the same page; results export as XLSX with the ruleset version attached.