The brain behind global trade

Classify.
Calculate.
Prove.

Every SKU mapped to its tariff code, its duty rate, and the official schedule it came from. 917,328 national tariff lines, every one sourced.

The store 01

See your whole store, classified.

Paste a store URL. Harmonova returns the tariff code, the duty rate, and the official schedule behind each one.

open source·200+ countries·917,328 tariff lines · 147 schedules·100% cited

Customs software still runs like it’s 1989

Sourced--:--:-- UTC
Harmonova · 200+ countries
Harmonova

Every line, source verified

Every line hands back a receipt to the official government schedule it came from. source on every line.

RecCalculating duty · 2026

917,328 national tariff lines. 147 national schedules. Full global coverage.

RecFiling a customs entry · 2026

The problem 02

Global trade runs on one code. Most tools still get it wrong.

Classification is where the money leaks. Every number below traces to a primary authority or a named report.

The scale

$34.65T

Global trade in goods and services in 2025. Every shipment of goods needs an HS code, and that code sets the duty.

WTO · World Trade Statistics 2025

The scope

98%

of world merchandise trade moves on HS codes. One nomenclature, maintained by the WCO, used by 200+ countries.

World Customs Organization

The leak

10-digit

200+ countries share the first six digits. Duty is set at the full 10-digit national line. Stop at six and you pay the wrong rate.

World Customs Organization

The penalty

US Customs can charge up to four times the duty for gross-negligent classification, and the full value of the goods for fraud.

19 U.S.C. § 1592

The friction

94%

of cross-border businesses surveyed hit shipping delays from incorrect classification or documentation.

Avalara · Cross-Border Ecommerce 2023/24

The complexity

73%

of product categories now fall into tariff-sensitive classifications after the 2025 tariff changes.

ePost Global, 2025 · 15.6M shipments

The cost

€2B

One EU case. Misclassification is not a rounding error - it is duty leakage at scale.

OLAF · EU Court of Justice, C-213/19

Why not just AI

25%general-purpose AI gets the full 10-digit code right just one time in four
44-89%even purpose-built classifiers swing this wide at the 10-digit line

A language model pattern-matches. Harmonova can only return a code that exists in the tariff schedule, and every rate carries the official source and revision it was parsed from.

The legacy problem 03

Customs is stuck in 1989. Your margin pays for it.

Customs today · best guess
VS
Harmonova · every line cited
HARMONOVA HV-1

The capabilities 04

The customs engine, drawn to spec.

917,328 national tariff lines across 147 national schedules. The complete WCO nomenclature everywhere else. Every number traceable to its source.

FIG.01

Straight from the authority

Rates come only from the authority that publishes them: USITC, EU TARIC, UK Trade Tariff, CBSA, NZ Customs, ABF, MOF. 100% of rows carry a source key.

$source: USITC
FIG.02

Classification that cannot invent

Product description to HS-6 and full HTS-10, with a confidence score. The classifier can only return a code that exists in the database.

$classify()
FIG.03

Origin-aware duty stack

Section 301, Section 232, IEEPA, free trade agreements. The right stack for the right origin, effective dated.

$origin = CN
FIG.04

Auditable to the revision

Every line records the official schedule and the revision it was parsed from, so a superseded measure is identifiable.

$source + revision
FIG.05

Self-verifying engine

Independent reconciliation against USITC, plus a reference-basket gate that catches drift before you do.

$9/9 agree
FIG.06

Open + API-native

One database, REST + MCP. A single endpoint classifies, resolves duty, and returns a source for every number.

$REST · /v1

Under the hood 07

A real database, with a guarded model on top.

Harmonova is not an AI guessing at tariffs. The rates are a database - parsed from the schedules governments publish, versioned, receipt on every line. A model proposes the classification; a deterministic guard chain corrects it, labels it, and shows its work.

A database, not a guess

917,328 national tariff lines parsed from the official schedules, versioned, with a source on every line. The rates were never generated - they were published, and we can show you where.

Official sources only

USITC, EU TARIC bulk exports with the publisher's own PGP signature verified on every file, the UK Trade Tariff, national customs authorities. No scraped aggregators, no bought lists.

Self-verifying

Quality gates freeze a source the moment its data drifts. Trade remedies are verified against the Federal Register, quoted verbatim. A rate that cannot be proven is served as a floor, never a guess.

Fail-closed by doctrine

A frozen source stops writing. An unproven duty rounds up, never down. A classification the engine doubts is flagged in your face, not smoothed over. Kill switches on every paid path.

01

Source

The official schedules, read from the authorities that publish them. Every line lands with its source, revision and parse date - the receipt exists before the rate does.

02

Verify

Change-rate and drift gates score every sync; a source that moves suspiciously is frozen and paged, not trusted. 53 US trade-remedy orders live, each citing its Federal Register document verbatim.

03

Classify

A model proposes. A deterministic guard chain corrects: facts stated on the listing beat the model's guess, ties fall to the higher-duty line, and confidence is earned per row - then labelled as model output, always.

04

Price

Landed duty to the national line, including the 415 formula duties simple tools skip - per hectolitre, per 100 kg, composite - plus screening against 36,828 denied parties on seven sanctions lists.

917,328
national tariff lines
147
national schedules
106,600
lines at 10-digit depth
5,726
six-digit headings
53
FR-verified remedy orders
415
stored duty formulas
36,828
denied parties screened
198
de-minimis markets
13,000+
automated tests
91,500
lines of TypeScript

Built on a best-in-class stack

TypeScriptstrict, end to end
Next.jssite + portal
Reactthe product surface
Tailwindone token language
Postgres · Neonthe sourced database
Fly.ioSydney region
Cloudflareedge network
Anthropicmodel calls, zero data retention
Vitest13,000+ tests
GitHub ActionsCI + scheduled syncs

The doctrine is fail-closed. A source that drifts is frozen, not trusted. A duty we cannot prove is a floor, never a guess. A classification the engine doubts is flagged, never smoothed over. And the model never files anything: it proposes, the record shows why, and you decide.

The data engine 05

Every duty. Every market. Traced to source.

Every rate comes from the government that set it, and carries the schedule it was parsed from. 917,328 national tariff lines across 147 national schedules. The complete Harmonized System behind 200+ countries.

correction loop · every correction is reviewed before it lands
Harmonovathe verified duty engine
Coverage200+ countries · every category
Official-source engineevery rate from the authority that set it
Quote engineproduct → landed cost
Full national depth7 markets · 100%
United States
100%
Canada
100%
New Zealand
100%
Australia
100%
Japan
100%
European Union
100%
United Kingdom
100%
Official sourcesUSITC · TARIC · CBSA · ABF01
Adaptersparse each official schedule02
Quality gaterejects + freezes bad batches03
Verified databaseevery line cites its schedule and revision04
Productany SKU or description01
HS classificationonly codes that exist in the schedule02
Landed costduty + tax + fees + stacking03
Scored resulta source on every line04
Provenance gateevery line carries its source
harmonova.db · duty linessource-verified

Sample of stored duty lines with their official source: US 6109.10.00 16.5%, source usitc-hts; CA 6109.10.00.00 18%, source ca-cbsa; EU 6109100010 12%, source eu-taric; GB 6109100010 12%, source uk-tariff; JP 6109.10.010 10.9%, source jp-customs; NZ 6109.10.00 10.0%, source nz-customs; AU 6109.10.00 5%, source au-abf; US 6204.11.00.00 14%, source usitc-hts; CA 6204.11.00.00 18%, source ca-cbsa; EU 6204120010 12%, source eu-taric; JP 6203.11.100 16%, source jp-customs; GB 6203191000 12%, source uk-tariff; US 4202.12.21 20%, source usitc-hts; AU 6402.12.00 Free, source au-abf.

Sources: USITC · TAXUD · HMRC · MOF JP · CBSA · NZ Customs · ABF

Swipe to explore

Why it's different 06

A database, not a guess.

Harmonova is a real customs database. 917,328 national tariff lines across 147 national schedules, plus the complete Harmonized System that 200+ trading economies classify against. Every line carries the official schedule it was parsed from. AI does one job here: plain-language lookup. The answer comes from the data, not a model's memory.

917,328 national tariff lines

895,210 filable lines across 147 national schedules. Not fuzzy memory, not a scrape, not an average.

A receipt on every line

Each line records the official schedule and revision it was parsed from. Rates come only from the authority for that market.

AI that cannot invent a code

Plain-language search over verified customs data. The classifier can only return a code that exists in the database.

TRY ITFabric x-ray · classification scanner 07

A 2% difference in fabric.
3× the duty bill.

US customs taxes a blend by whichever fibre weighs the most. Drag across the 50% line: the HS heading changes, and the duty rate triples behind it.

// Fabric x-rayChief weight COTTON
SCAN.01 · ACTIVE
CLEAR
FIBRES · COTTON 60 · POLY 40
HS 6202.30
Cotton 60%40% Poly
100% cotton50% · cliff100% poly
classify.outClassified
HTS-106202.30.20.10
Of cotton8.9%
Order type
Duty on a $250 order$22
Cost of the wrong call+$47
Rates · USITC HTS · CH. 62Rule · Section XI Note 2(A) · Chief weight
HARMONOVA · XRAY V2

Classify. Calculate. Prove.

PRODUCTHS CODESKUCATALOGBORDERDUTYLANDED COSTRECEIPT

Get started 08

From any SKU to landed duty in seconds, across 917,328 national tariff lines. Every rate carries the official schedule it came from.

See the data engine