Normalising Company Data Without Losing the Original: Legal Forms, Activity Codes and Statuses

How Fuentio maps French and Spanish legal forms to ISO 20275 ELF codes, NAF to NACE and ISIC, and statuses to one list, while keeping the register's own words.

· By the Fuentio team · 7 min read

Share image: "Normalising Company Data Without Losing the Original: Legal Forms, Activity Codes and Statuses" on Fuentio's paper background, with the Guide label.

A French SAS and a Spanish S.L. are both limited companies, but nothing in their registers says so in the same words. A French activity code ends with a letter; the Spanish register publishes no activity code at all. If your product works across both countries, you need one way to compare them, without throwing away what each register actually said. This page explains how Fuentio normalises legal forms, activity codes and statuses, and the one rule behind all of it: the original always travels with the normalised value.

Method as of 10 October 2026; examples are real recorded answers.

Short answer: Fuentio keeps every value as the register published it (original_code, original_label) and adds standard codes next to it: an ISO 20275 ELF code and a closed category for the legal form; NACE Rev.2 and ISIC Rev.4 codes plus an English label for the activity; and one closed status list that never assumes a company is active. Mappings are only filled when they're unambiguous; otherwise the field stays empty.

What you'll learn

  • The "original plus normalised" pattern, and why it matters for compliance
  • How legal forms map to ISO 20275 ELF codes and categories
  • How French NAF codes map to NACE and ISIC
  • The single status list, and the rules behind it
  • What we leave empty rather than guess

Why keep the original?

Normalisation is an interpretation. Interpretations can be wrong, and rules change. If a system keeps only its own mapped value, nobody can check it later. So every normalised field in a Fuentio record carries the source's own code and label:

"legal_form": {
  "original_code": "5510",
  "original_label": "SA nationale à conseil d'administration",
  "elf_code": "1NF1",
  "category": "public_limited_company"
}

Your compliance team can quote the register's exact words; your product can filter on the category. Both come from the same answer.

The standard. ISO 20275 defines Entity Legal Forms (ELF): one code per legal form per jurisdiction, from an official code list. We use the list's French and Spanish codes.

France. The source gives INSEE's four-digit legal category. We matched each INSEE category to the French ELF names by its normalised label: 257 of 260 categories matched exactly; two more matched by their official abbreviation (SAS and SLP); one, "Assujetti unique à la TVA", has no ELF code and gets none.

Spain. The BORME prints the legal form as a mandatory suffix of the company name (S.L., S.A., S.L.U., S.L.L.…). We read the suffix and map it to its ELF code: S.L. gives DP3Q.

Categories. On top of the ELF code, a closed category (for example public_limited_company, private_limited_company, cooperative) lets you treat an SAS and an S.L. the same way in your rules when that's what you want. See French legal forms and Spain's S.L. and S.A..

How are activity codes mapped?

France publishes the NAF code, which is the European NACE Rev.2 class plus a letter. So 64.20Z becomes NACE 64.20 by dropping the letter, and NACE maps to the UN's ISIC Rev.4 class (6420), which is one-to-one for every class today. We add an English label from Eurostat's list:

"activity": {
  "original_scheme": "NAF_REV2",
  "original_code": "64.20Z",
  "original_label": "Activités des sociétés holding",
  "nace_rev2": "64.20",
  "isic_rev4": "6420",
  "label_en": "Activities of holding companies"
}

Codes outside the current NAF list, for example old codes on long-closed companies, keep their original code and get no NACE or ISIC rather than a guess. France is moving to NAF 2025 for APE codes from 2027; see the APE/NAF code explained.

Spain: the BORME publishes no activity code, only the corporate purpose as free text. So activity is empty for Spanish records, and the purpose is kept as published. We don't derive a code from free text.

How are statuses normalised?

Every record has a status with a value from one closed list, the source's own label, and a date:

ValueFR (Sirene)ES (BORME acts)
activeState ANever: no act proves current activity
inactiveState C (ceased), datedProvisional closure of the registry sheet
in_liquidationNever inferredDisolución
dissolvedNever (ceased isn't a legal dissolution)Extinción
unknown—Anything else, including a recent incorporation

Two rules matter for risk decisions:

  • unknown is never treated as active. For Spain, most companies are unknown because the source publishes events, not states.
  • We never infer a stronger status than the source states. A company that Sirene marks as ceased is never reported as dissolved, liquidated or struck off.

See how we read French data and how we read the BORME.

What do we leave empty?

  • A legal form with no ELF code: elf_code: null.
  • An activity code outside the official list: no NACE, no ISIC.
  • A Spanish activity: always empty.
  • A Spanish postal code the BORME didn't print: null.
  • A French dissolution date: null, because the source doesn't state one.

An empty field is information: it tells you the source didn't say. A filled-in guess would hide that.

How to use normalised fields in your rules

A few patterns we see in onboarding and risk rules:

  • Filter on legal_form.category, not on labels: "private limited companies" in one rule covers SAS, SARL, S.L. and S.L.U.
  • Route on status.value, but quote status.original_label in your file: the rule stays simple, the evidence stays exact.
  • Group activities on activity.nace_rev2 for France, and treat a missing activity as "unknown", not as "low risk".
  • Treat unknown as its own case. Never let a default turn it into active.

And when you show data to a person, show the original wording first: a compliance analyst reading "SA nationale à conseil d'administration" knows exactly what they're looking at.

Why this helps cross-border teams

  • Filters work across countries: "private limited companies, holding activities" is one query, not two vocabularies.
  • Labels are readable by teams who don't read French or Spanish.
  • Audits stay possible, because the original wording is right next to every mapped value.

Fuentio's API isn't open yet. Become an early tester to see normalised records on the companies you work with.

See what we cover in France and Spain.

Frequently asked questions

What is an ELF code?

The ISO 20275 Entity Legal Form code: one code per legal form in each jurisdiction, from an official list. Fuentio adds it next to the register's own legal form.

How do you convert a French NAF code to NACE?

Drop the final letter: 64.20Z is NACE 64.20. Fuentio also adds the ISIC Rev.4 class and an English label.

Why don't Spanish records have an activity code?

The BORME publishes no activity code, only the corporate purpose as text, and we don't derive codes from text.

Do you ever change the register's data?

No. The original code and label are always kept; normalised values are added next to them.

Sources

← All articles · RSS feed