---
title: "Discussion on \"Look up European companies from official registers with one API\" | Hashnode"
description: "Discussion on \"Look up European companies from official registers with one API\". Which European company registers offer free official data, what each returns, and how to query them (plus GLEIF LEI) through one interface for KYB, CRM enrichment and invoice checks.\nKYB checks, CRM e"
url: "https://hashnode.com/posts/look-up-european-companies-from-official-registers-with-one-api/6ad0d7b8272268e5d656d41a"
---

[Feed](https://hashnode.com/feed) /

Discussion

# [Look up European companies from official registers with one API](https://wsystem.hashnode.dev/look-up-european-companies-from-official-registers-with-one-api?utm_source=hashnode&utm_medium=feed)

Which European company registers offer free official data, what each returns, and how to query them (plus GLEIF LEI) through one interface for KYB, CRM enrichment and invoice checks. KYB checks, CRM e

Oct 15 · 2 min read · wsystem.hashnode.dev  
Updated Oct 18  
Read the article

-   [#kyc](https://hashnode.com/tag/kyc)
-   [#api](https://hashnode.com/tag/api)
-   [#opendata](https://hashnode.com/tag/opendata)
-   [#b2b](https://hashnode.com/tag/b2b)

## Written by

[W System](https://hashnode.com/@wsystem)

@wsystem

  
[View profile](https://hashnode.com/@wsystem)

EU VAT, company, tenders & sanctions APIs for developers and AI agents

## Responses 4

Markdown supported · ⌘↵ to post

[StackShortlist](https://hashnode.com/@veristria)

[Oct 15](https://hashnode.com/posts/look-up-european-companies-from-official-registers-with-one-api/6ad0d7b8272268e5d656d41a/comment/6ad133dcf39c066aacfe3e6a)

Normalizing registers across countries is harder than it looks, since status values like dissolved, in liquidation and struck off mean different things per jurisdiction. Curious how you map those to a single active or inactive flag, or whether you keep the original status string next to it.

[W System](https://hashnode.com/@wsystem)

[Oct 16](https://hashnode.com/posts/look-up-european-companies-from-official-registers-with-one-api/6ad0d7b8272268e5d656d41a/comment/6ad133dcf39c066aacfe3e6a#reply-6ad1d5e403382ad46b679a6c)

Great question, and honestly, this is the least polished part of the Actor right now.

Every record gets two fields: "active" (true/false) and "status" (a string). "active" is the one that's consistent everywhere. "status" isn't a shared vocabulary yet. Mostly it's the registry's own value, passed through or lightly translated:

-   FR: the raw SIRENE etat\_administratif code (A or C)
-   EE: R/L/N/K mapped to registered / in liquidation / bankrupt / deleted
-   FI: PRH's English company-situation text (e.g. liquidation, bankruptcy) when one exists, otherwise registered/ended
-   GLEIF: the LEI entity status (ACTIVE/INACTIVE)
-   CZ: "dissolved" if ARES has a termination date, otherwise "active"
-   NO: konkurs, underAvvikling and slettedato all collapse into one "deleted/bankrupt/dissolving" value, so you can't tell liquidation from struck-off there
-   PL: we only read the current KRS extract, so it always says "registered" and doesn't check liquidation or bankruptcy entries yet

We also don't keep the raw code as a separate field in every source. Next on the list: a shared enum (active / in\_liquidation / bankrupt / dissolved), the raw code kept next to it, and proper liquidation detection for NO and PL. Thanks for pushing on this!

[W System](https://hashnode.com/@wsystem)

[Oct 16](https://hashnode.com/posts/look-up-european-companies-from-official-registers-with-one-api/6ad0d7b8272268e5d656d41a/comment/6ad133dcf39c066aacfe3e6a#reply-6ad1d7ece1ba22377118c476)

Quick update: this is now shipped (Actor build 1.0.2, also on our API).

Every record now has status\_normalized, one of active / in\_liquidation / bankrupt / dissolved / unknown, plus status\_raw with the registry's own codes and flags. The existing status and active fields are unchanged.

What changed for the weak spots:

-   NO: konkurs, the liquidation flags and slettedato are now separate (bankrupt / in\_liquidation / dissolved).
-   PL: we read the KRS bankruptcy and liquidation sections and the deletion date, and old closed bankruptcies stay active.
-   CZ: dissolved also comes from the commercial-register state, insolvency register entries map to bankrupt, and "v likvidaci" names to in\_liquidation.
-   FI: PRH situation codes (KONK, SELTILA, SANE) are mapped, with reorganisation flagged in status\_raw.

I checked it against about 20 real companies across the seven sources. One caveat: for CZ, "bankrupt" means active insolvency proceedings, which isn't always a declared bankruptcy. Thanks again, the question made the data better.

[StackShortlist](https://hashnode.com/@veristria)

[Oct 16](https://hashnode.com/posts/look-up-european-companies-from-official-registers-with-one-api/6ad0d7b8272268e5d656d41a/comment/6ad133dcf39c066aacfe3e6a#reply-6ad2061b4ed3c9fa1924633e)

That was fast. Keeping status\_raw next to the normalized value is the bit I'd have asked for, since the Norwegian konkurs vs underAvvikling split matters a lot when you're cleaning a prospect list. Will try 1.0.2 on a batch of NO and CZ companies.
