Skip to main content
Every business register classifies what a company does, and almost every one of them uses its own scheme: PKD in Poland, ATECO in Italy, NAF in France, EMTAK in Estonia, OKVED in Russia, NAICS in the United States. Topograph publishes the register’s own code exactly as it was declared, and alongside it two international standards you can build one integration against:
  • ISIC Rev. 5, the global standard maintained by the United Nations Statistics Division
  • NACE Rev. 2.1, the European standard maintained by Eurostat, in force for EU statistics from 2025

Three layers, always

Whenever a company has any activity classification at all, the response carries both ISIC and NACE. If a register publishes only one of the two, we derive the other. The register’s own code keeps its own key, in the register’s own format, untouched. The only time these are absent is when the source register exposes no activity data for the company.

Why the revision matters

This is the single most common source of confusion, so it is worth being precise. NACE Rev. 2.1 replaced NACE Rev. 2 for EU statistics from 2025. It is not a renaming: a substantial number of four-digit codes were reused for a different activity. A register that has not yet migrated still reports Rev. 2. We transition those codes to Rev. 2.1 using the official Eurostat correspondence before publishing them under activities.NACE, so everything on that key is Rev. 2.1 regardless of where it came from.
If you hold historical Topograph responses, or you compare our output against a register’s raw export, expect Rev. 2 and Rev. 2.1 codes to disagree on the same company. Compare the descriptions, not the digits.

ISIC and NACE do not share their four-digit codes

NACE Rev. 2.1 is built on ISIC Rev. 5, but the two are only identical down to the two-digit division. Below that they diverge: NACE subdivides more finely (651 classes against ISIC’s 463) and numbers its classes independently. The practical consequence: never assume an ISIC code and a NACE code with the same four digits mean the same thing. ISIC 4671 is wholesale of fuels; NACE 46.71 is wholesale of motor vehicles. If you segment your portfolio on the two-digit division, the two standards agree exactly, and that is the safest cross-standard key.
No official NACE Rev. 2.1 to ISIC Rev. 5 correspondence table is published by either Eurostat or the UNSD. Ours is derived from the two official structures, matching classes on their official headings and falling back to the guaranteed division containment. Every published pair sits inside the division both standards share.

One code in, one code out

We never publish an activity the register did not declare. You get one standardized class per declared code, never a list of candidates we could not choose between. Classification systems do not line up one-to-one. When a declared class corresponds to several classes in the target standard, the true one is unknowable from the code alone. Rather than return all of them, we return the most precise code the correspondence actually supports:
A shorter code is not missing data. 64.2 means the register told us the company is a holding company but not which kind, and that is the most specific statement the source supports. The register’s own code is always published in full alongside it.
Of the 651 NACE Rev. 2.1 classes, 554 correspond to a single four-digit ISIC class. The remaining 97 are finer than any ISIC class, so they resolve to an ISIC group or division by design.

Deterministic first, AI only as a fallback

Most of the work is a table lookup, not a model. The AI step runs only when a register publishes a classification we hold no formal correspondence for (a national scheme such as ATECO or SIC), or only a free-text description of the business. It chooses from the 463 ISIC Rev. 5 classes and nothing else: it cannot invent a code, and it cannot return a coarse section or division. When it is not confident, it returns nothing rather than guessing.

isAIInferred

Every activity code carries this flag, so you can always tell how it was produced. A derived code inherits the flag of the code it came from: an ISIC class matched by AI produces a NACE code that is also marked true.
If your compliance process requires register-sourced classification only, filter on isAIInferred: false.

National classifications

Where a register publishes its own national scheme, you get it under its own key, in its own format, in addition to ISIC and NACE.
National keys carry the register’s own revision, which is frequently NACE Rev. 2 rather than Rev. 2.1, and their descriptions are the labels of that revision. Only activities.NACE is guaranteed to be Rev. 2.1. Do not compare a national code to a NACE code digit by digit.

Example response

A Polish company whose register entry declares one PKD activity:
The PKD code is the register’s, in the register’s format. NACE 62.10 is the Rev. 2.1 class the Rev. 2 code 62.01 transitions to. ISIC 621 is a group rather than a class because NACE 62.10 covers the whole of ISIC group 621, and naming one of its children would claim a precision the register never gave.

Working with the data

Use the two-digit division. It is identical in ISIC Rev. 5 and NACE Rev. 2.1, present on every standardized code we publish, and stable across the Rev. 2 to Rev. 2.1 transition for most divisions. Take the first two characters of either activities.NACE[].code or activities.ISIC[].code.
Match on the full code, and handle codes shorter than four digits. Treat a three-digit ISIC group or two-digit division as “within this family, precision not available”, not as a non-match. Never pad or truncate a code to force a comparison.
Compare descriptions rather than digits, and check which revision your extract uses. A register export that predates the 2025 transition is NACE Rev. 2, and its four-digit codes will disagree with ours for a substantial number of activities.
Filter on isAIInferred. false means register-declared or derived through an official correspondence, and is reproducible. The register’s own code under its national key is always false.