Measured comparison · refreshed 2026-10-15
Tariff Accuracy Check
On 2026-10-15 we sent the same six live queries to four competing tariff tools and to our own production endpoint, archived every raw response, and checked each answer line-by-line against the official USITC schedule. No marketing numbers below — just what each service actually returned, with the archived bytes one click away.
6 query samples·5 services measured ·window 2026-10-15T13:46-13:48 UTC·every cell links its raw response
How this was measured
- Samples: six real queries covering HS chapters 22/61/64/73/85/87 and six origins (CN, FR, DE, IN, VN, ID); HTS prefixes taken from existing rows of the USITC-derived ledger; anonymous requests, zero personal data.
- Truth reference: USITC REST export
data/hts.json(generated 2026-10-09T17:43Z, 23,193 lines); each truth cell was extracted programmatically, never copied by hand. - Window: all 30 requests completed inside 2026-10-15T13:46-13:48 UTC; serial single-exit measurement, so absolute latencies vary with network conditions while the cross-vendor ordering is stable across batches C/E/F.
- Honest blanks: vendors whose anonymous surface yields no comparable figures this round are shown as such — not extrapolated, not scored zero.
- Dollar figures: for specific-rate lines the duty shown is what each service returned for the quantity echoed in its own archived response (sample S2: 750 liters × 6.3¢/liter = $47.25).
- Re-run: single-spot commands in the “Verify it yourself” section below reproduce every headline number against live endpoints and the ledger.
Accuracy matrix — six samples across five services
| Query (HS × origin) | USITC ledger | SimplyDuty | Zonos | Otterly.ai | tariffsapi | ExportSonar |
|---|---|---|---|---|---|---|
| 8517.13.00.00S1 · CN origin · $1,000 · Smartphones | Free | Signup-gated: POST answered 200 but returned no duty figures without an API key Evidence | Client-side app shell; no server-rendered query result to compare Evidence | No HS/tariff lookup surface in scope of this test Evidence | base Free (0%) + MPF 0.35% — matches ledger Evidence | Free → $0.00 Evidence |
| 2204.21.50S2 · FR origin · $500 · Still wine, ≤2 l | 6.3¢/liter | Signup-gated: POST answered 200 but returned no duty figures without an API key Evidence | Client-side app shell; no server-rendered query result to compare Evidence | No HS/tariff lookup surface in scope of this test Evidence | base 0% — specific ¢/L rate not parsed Evidence | 6.3¢/liter → $47.25 Evidence |
| 8703.23S3 · DE origin · $20,000 · Passenger cars 1500–3000 cc | 2.5% | Signup-gated: POST answered 200 but returned no duty figures without an API key Evidence | Client-side app shell; no server-rendered query result to compare Evidence | No HS/tariff lookup surface in scope of this test Evidence | base “Section 301” 10% (China-origin measure) where ledger shows 2.5% Evidence | 2.5% → $500.00 Evidence |
| 6109.10S4 · IN origin · $300 · Cotton T-shirts, knitted | 16.5% | Signup-gated: POST answered 200 but returned no duty figures without an API key Evidence | Client-side app shell; no server-rendered query result to compare Evidence | No HS/tariff lookup surface in scope of this test Evidence | base “Section 301” 10%; total_duty $31.05 vs ledger-derived $49.50 Evidence | 16.5% → $49.50 Evidence |
| 7326.90S5 · VN origin · $800 · Other iron/steel articles | Free | Signup-gated: POST answered 200 but returned no duty figures without an API key Evidence | Client-side app shell; no server-rendered query result to compare Evidence | No HS/tariff lookup surface in scope of this test Evidence | base “Section 301” 12.5% where ledger shows Free Evidence | Free → $0.00 Evidence |
| 6404.11S6 · ID origin · $250 · Sports footwear, textile upper | 10.5% | Signup-gated: POST answered 200 but returned no duty figures without an API key Evidence | Client-side app shell; no server-rendered query result to compare Evidence | No HS/tariff lookup surface in scope of this test Evidence | base 10% where ledger shows 10.5% Evidence | 10.5% → $26.25 Evidence |
Each EV link opens the archived raw response captured during the
same measurement window (served under /data/accuracy-check-batch-f/, also committed to the
repository). “Signup-gated” means the anonymous channel returned a page but no comparable duty
figures this round; it is not a claim about paid-API capabilities. Dollar figures are customs duty only — statutory Merchandise Processing Fees are charged separately by the services that itemize them.
What the archived responses show
Our six answers match the ledger
All six ExportSonar cells reproduce the printed USITC Column 1 general rate,
including the two cases the ledger makes easy to miss: a specific
6.3¢/liter component on wine (S2) and a duty-free
7326.90 suffix (S5).
One vendor returned Section 301 as a base rate for non-China origins
For the DE, IN, VN and ID samples, tariffsapi's demo endpoint returned a
“Section 301” layer of 10–12.5% as the base rate;
Section 301 measures apply to China-origin goods, and the ledger rates for those
lines are 2.5%, 16.5%, Free and 10.5% respectively. On the French wine sample the
specific ¢-per-liter component went unparsed (base 0%). These are archived
responses, not interpretations — follow the Evidence links.
Three anonymous surfaces yielded no comparable figures
SimplyDuty's anonymous POST returns HTTP 200 but displays no duty figures without an account; Zonos serves a client-side app with no server-rendered result; Otterly.ai operates AI-visibility scans rather than an HS lookup. They are marked “not measurable anonymously this round” above.
Response latency, same window
| Service | Median (ms) | Min | Max |
|---|---|---|---|
| ExportSonar | 214 | 141 | 435 |
| tariffsapi | 2487 | 1997 | 4095 |
| Zonos | 3468 | 2541 | 5738 |
| Otterly.ai | 3640 | 2987 | 4975 |
| SimplyDuty | 6617 | 4751 | 13507 |
Same six samples, serial execution, full round-trip per request. Medians: ExportSonar 214 ms vs fastest competitor 2,487 ms (≈11.6×) — measured 2026-10-15T13:46-13:48 UTC; method and re-run commands in the appendix above and below. Absolute values fluctuate with network conditions; the ordering has held across three monthly batches.
Verify it yourself
1. Our live endpoint (expected: general 16.5%, duty $49.50)
curl -s 'https://exportsonar.com/api/v1/tariff?hs=6109.10&origin=IN&value=300'
2. The competitor demo endpoint used in the batch (expected: a “Section 301” base layer of 10%)
curl -s 'https://tariffsapi.com/demo/resolve?hts=6109&origin=IN&value=300'
3. The authoritative ledger row (expected: 6109.10.00 → 16.5%)
python3 -c "import json;d=json.load(open('data/hts.json'));print([r for r in d['records'] if r['hts']=='6109.10.00'])"
Check your own codes against the ledger
Every rate behind this comparison comes straight from the official schedule — the same numbers power our free lookup. No signup, no daily cap.
Methodology for the mirrored datasets behind this audit: the UFLPA enforcement statistics and the EU TARIC measures pages document sources row by row.
Open the Duty Calculator Browse HS Codes See Pricing