Gå til indhold

For udviklere

API

Slå danske virksomheder op programmatisk. Gratis, åbent og uden nøgle - samme data som resten af siden, serveret som JSON.

Kom i gang
curl "https://bloo.dk/api/v1/virksomhed/61056416"

API'et er læsbart (kun GET), kræver ingen registrering og ingen nøgle. Alle svar er JSON med UTF-8, og Access-Control-Allow-Origin: * er sat, så du også kan kalde det direkte fra en browser.

Basis-URL er /api/v1. Versionen er en del af stien: felter kan blive tilføjet inden for v1, men eksisterende felter forsvinder ikke og skifter ikke type. Bryder vi noget, sker det i /api/v2.

Konventioner

Enkelte ressourcer svarer { "data": { ... } }. Lister svarer { "data": [ ... ], "meta": { ... } }, hvor meta rummer totaler og de parametre svaret blev bygget på. Fejl svarer { "error": { "code", "message" } }.

  • Datoer er ISO-8601 (2025-12-31). Beløb er hele kroner som tal, ikke strenge.
  • Felter der ikke findes i registret er null- de udelades ikke. Et manglende felt betyder »ikke oplyst«, ikke nul.
  • Svar cachekan i et CDN (s-maxage). CVR opdateres dagligt, så data kan være op til et døgn bagud - se vilkår.

Endpoints

GET/api/v1/soeg

Søg virksomheder på navn eller CVR-nummer. Bruges til autocomplete og til at oversætte et navn til et CVR-nummer.

qpåkrævetSøgetekst, mindst 2 tegn. Et 8-cifret tal slår direkte op på CVR-nummer.
limit1-50Antal resultater. Standard 10.
Svar (forkortet)
{
  "data": [
    {
      "type": "virksomhed",
      "cvrNummer": 61056416,
      "navn": "CARLSBERG A/S",
      "status": "NORMAL",
      "postby": "København V",
      "virksomhedsform": "A/S",
      "branche": "Forskning og eksperimentel udvikling ...",
      "ansatte": 95,
      "stiftet": "1999-10-16"
    }
  ],
  "meta": { "q": "carlsberg", "limit": 10, "total": 42 }
}

GET/api/v1/virksomhed/{cvr}

Fuld virksomhedsprofil. Indeholder både de aktuelle værdier (navn, status, adresse, branche, kapital) og de fulde historiske arrays (navneHistorik, adresseHistorik, virksomhedsstatusHistorik, …), plus deltagere, penheder, fusioner og spaltninger.

Det er et stort svar. Vil du kun have nøgletal, så brug /api/v1/regnskaber/{cvr} i stedet.

Svar (forkortet)
{
  "data": {
    "cvrNummer": 61056416,
    "navn": "CARLSBERG A/S",
    "binavne": [],
    "status": "NORMAL",
    "virksomhedsform": "A/S",
    "stiftelsesdato": "1999-10-16",
    "ophoersdato": null,
    "formaal": "Selskabets formål er ...",
    "tegningsregel": "Selskabet tegnes af ...",
    "branche": { "kode": "721900", "tekst": "Forskning og ..." },
    "adresse": {
      "vejnavn": "Ny Carlsberg Vej",
      "husnummerFra": 100,
      "postnummer": 1799,
      "postdistrikt": "København V",
      "kommune": { "kommuneKode": 101, "kommuneNavn": "København" }
    },
    "kapital": [ { "vaerdi": 2653136120, "valuta": "DKK" } ],
    "ansatte": 95,
    "ansatteAar": 2026,
    "reklamebeskyttelse": false,
    "deltagere": [ /* ejere, ledelse, stiftere, revisor */ ],
    "penheder": [ /* produktionsenheder */ ],
    "navneHistorik": [ /* ... */ ],
    "sidstOpdateret": "2026-08-07T09:12:44.000Z"
  }
}

GET/api/v1/regnskaber/{cvr}

Nøgletal pr. offentliggjort årsrapport, udlæst maskinelt af den indberettede XBRL-fil. Ældste år først. Kvartals- og halvårsrapporter frasorteres, så du kun får egentlige årsregnskaber.

aar1-20Antal årsrapporter. Standard 10.

En tom data-liste er et gyldigt svar, ikke en fejl: ikke alle virksomheder har offentliggjort et regnskab, og ikke alle XBRL-filer kan udlæses. Enkelte felter kan være null, selv når året findes.

Svar (forkortet)
{
  "data": [
    {
      "regnskabsId": "...",
      "periode": { "startDato": "2025-01-01", "slutDato": "2025-12-31" },
      "aar": 2025,
      "omsaetning": 89100000000,
      "bruttofortjeneste": null,
      "resultatFoerSkat": 8900000000,
      "resultat": 7000000000,
      "aktiver": 154000000000,
      "egenkapital": 30700000000,
      "likvider": 9600000000,
      "kortfristetGaeld": 48500000000,
      "langfristetGaeld": 74700000000
    }
  ],
  "meta": { "cvrNummer": 61056416, "antal": 10 }
}

GET/api/v1/produktionsenhed/{pnummer}

En produktionsenhed (fysisk arbejdssted) ud fra dens 10-cifrede P-nummer. Svaret indeholder cvrNummer og virksomhedsnavn for den ejende virksomhed, så du ikke behøver et opslag mere.

GET/api/v1/virksomheder

Virksomheder filtreret på branche og/eller kommune, pagineret. Mindst én af branche og kommune skal angives - uden filter ville det være et masseudtræk, og dem henter du hos Erhvervsstyrelsen, ikke her.

branche2-6 cifreDB07-branchekode. 6 cifre rammer præcist (620100 for computerprogrammering); 2-5 cifre rammer hele grenen (62 for IT-service).
kommune3 cifreKommunekode. Fx 101 for København.
qvalgfriYderligere fritekstfilter på navn inden for scopet.
statusvalgfriSæt til 'aktiv' for kun aktive virksomheder.
limit1-60Antal pr. side. Standard 30.
offset0-5000Startindeks. Standard 0.
Eksempel
curl "https://bloo.dk/api/v1/virksomheder?branche=620100&kommune=101&status=aktiv&limit=5"

Grænser

30 forespørgsler pr. minut pr. IP-adresse. Hvert svar oplyser dit forbrug:

X-RateLimit-Limit: 30
X-RateLimit-Remaining: 27
X-RateLimit-Reset: 1786000000     # unix-sekunder
Retry-After: 24                   # kun ved 429

Rammer du grænsen, får du 429 med Retry-After. Respekter den frem for at prøve igen med det samme. Har du brug for mere, så skriv til os med et par ord om hvad du bygger - det er nemmere at sige ja til end til trafik der bare rammer os.

Fejl

Alle fejl har samme form. Forgren dit program på error.code, som er stabil - error.message er til mennesker og kan blive omformuleret.

{ "error": { "code": "not_found", "message": "Ingen virksomhed med CVR-nummer 12345678." } }
400invalid_requestManglende eller ugyldig parameter.
400invalid_cvrCVR-nummeret er ikke 8 cifre.
400invalid_pnummerP-nummeret er ikke 10 cifre.
404not_foundEnheden findes ikke i registret.
429rate_limitedGrænsen er nået. Se Retry-After.
502upstream_unavailableCVR-registret svarede ikke.

Vilkår for brug

  • Angiv CVR / Erhvervsstyrelsen som kilde til data, og gerne BLOO med link som kilde til opslaget.
  • Hold dig inden for grænsen ovenfor. API'et er den tilladte vej til maskinel adgang - scraping af HTML-siderne er det ikke.
  • Brug ikke data til markedsføring, adresselister eller uanmodede henvendelser.
  • Data leveres »som de er«, uden garanti for at være korrekte, komplette eller aktuelle. Skal en oplysning holde i en aftale eller en sag, så verificér den hos Erhvervsstyrelsen.

De fulde vilkår står på vilkårssiden.

Hvad der ikke er med endnu

Ingen webhooks, ingen ændringsfeed og ingen koncernstruktur via API'et - koncerner findes indtil videre kun på sitet. Mangler du noget bestemt, så sig til; ønsker der kommer fra folk der faktisk bygger noget, vægter tungest.

Senest opdateret august 2026