getregdata
Free agent skilldenmark-cvr

CVR API

The CVR API is the official Danish company-register distribution from Erhvervsstyrelsen, covering Det Centrale Virksomhedsregister. It is free after a one-time registration and returns company profile, status, DB07 industry code and participants. The CVR number doubles as the Danish VAT number.

Free after registration, with no per-call charge. Note it is NOT licence-free open data - reuse, including commercial reuse, is permitted only once you have registered and accepted the CVR terms of use. Official docs: Erhvervsstyrelsen CVR distribution.

Install the skill
npx skills add Nolpak14/getregdata -g -y

Teaches your agent the endpoints, the auth pattern and the failure modes below - so it runs the check correctly rather than guessing. Read SKILL.md

What the API returns

What you get, for free

Company profile
CVR-nummer, navn, beliggenhedsadresse (registered address), founding date and virksomhedsform - the company form, such as ApS, A/S or IVS.
Industry
hovedbranche.branchekode as a DB07 code, the Danish national extension of NACE Rev.2. Use it to confirm the entity actually does the business a counterparty claims.
Status
virksomhedsstatus - active, under dissolution (oploesning) or under bankruptcy (konkurs). This is the pass or adverse signal.
Participants and management
deltager records covering the board and owners - the people and entities behind the company.
Authentication

Getting an API key

  1. Email [email protected] to request a free CVR distribution account.
  2. Accept "Vilkar for anvendelse af data fra CVR", the CVR terms of use. Acceptance is what makes reuse lawful, so it is not a formality.
  3. Authenticate with HTTP Basic using the username and password Erhvervsstyrelsen issues. Every query is a POST with a JSON body against an Elasticsearch endpoint.
export CVR_USER=your_cvr_distribution_username
export CVR_PASS=your_cvr_distribution_password

curl -u "$CVR_USER:$CVR_PASS" \
  -H "Content-Type: application/json" \
  -X POST "http://distribution.virk.dk/cvr-permanent/virksomhed/_search" \
  -d '{"query":{"term":{"Vrvirksomhed.cvrNummer":"10103940"}}}'

Compliance is a condition of the free tier, not a footnote. The licence permits commercial reuse but forbids marketing to anyone flagged with Reklamebeskyttelse, and bars re-identifying or harming individuals.

Reference

Endpoints

Purpose Call
Search companies by name POST /cvr-permanent/virksomhed/_search
Company lookup by CVR number POST /cvr-permanent/virksomhed/_search
People and participants POST /cvr-permanent/deltager/_search
Production units (p-numre) POST /cvr-permanent/produktionsenhed/_search
Workflow

Running a KYB check end to end

  1. 1
    Resolve identity

    Match on Vrvirksomhed.navne.navn and take the canonical cvrNummer from the hit. Names are not unique; CVR numbers are. Skip if you already hold one.

  2. 2
    Confirm it is real and current

    Query by term on cvrNummer and read virksomhedsstatus. Record virksomhedsform, hovedbranche.branchekode, founding date and beliggenhedsadresse.

  3. 3
    Who runs and owns it

    Query the deltager index for board and owner records. The company document does not inline full person detail.

  4. 4
    Its physical footprint

    Query produktionsenhed for the production units (p-numre) operating under the entity.

  5. 5
    Distress signals

    A status of under dissolution or under bankruptcy is adverse - stop and escalate rather than continuing the check.

Failure modes

What bites people

Reklamebeskyttelse gates any outreach use

A person or company flagged with advertising protection must be excluded from marketing use. This is a licence condition you accepted, not best practice - check the flag before a CVR-sourced contact ever reaches an outreach list.

The CVR number is the VAT number

The 8-digit cvrNummer doubles as the Danish moms registration. Prefix it with DK for the EU VAT id, as in DK10103940. You do not need a separate VAT lookup for a Danish entity.

branchekode is DB07, not raw NACE

hovedbranche.branchekode is the Danish national extension of NACE Rev.2. The first four digits align with NACE and the extra digits are national detail, so map before comparing across borders.

Participants live in a separate index

Board members and owners sit in the deltager collection, linked by CVR number. A virksomhed record on its own will not give you the people - that is a second query.

"Free for business" is precise, not general

It holds only for the official tier, only after registration and acceptance of the terms. This is not licence-free open data, and treating it as such is a licensing problem rather than a technical one.

The no-registration fallback cannot back a paid product

cvrapi.dk wraps CVR data with no account and a descriptive User-Agent, but it is limited to roughly 50 lookups a day and its terms forbid charging end-users to display CVR-API-derived data or gating features behind payment. Use it for a light internal check; use the official distribution for anything customer-facing.

Where the free API stops

The jurisdictions with no free equivalent

The UK is the outlier. Most European registers publish through portals built for people, not a general-purpose API - so the next jurisdiction you need probably has no free option. These read the official source live and return the same shape of structured record.

Germany · Company, officers and capitalPoland · Beneficial owners (UBO)Spain · Company directory, NIF and officersFrance · Directors, financials, shareholdersItaly · Full profile, P.IVA and certified PECSlovakia · Verified beneficial owners with PEP flags
FAQ

Is the Danish CVR API free?

Yes, with a caveat worth reading. The official Erhvervsstyrelsen distribution costs nothing per call, but it is not licence-free open data: you must request a credential and accept the CVR terms of use first, and those terms bind how you may reuse the data.

How do I get CVR API access?

Email [email protected] to request a free distribution account and accept "Vilkar for anvendelse af data fra CVR". You then authenticate with HTTP Basic against the Elasticsearch endpoint at distribution.virk.dk.

Is the CVR number the same as the Danish VAT number?

Yes. The 8-digit CVR number is also the moms registration - prefix it with DK for the EU VAT identifier. A separate VAT lookup is unnecessary for a Danish entity, though VIES will confirm the number is active for cross-border trade.

Can I use CVR data for sales outreach?

Only where Reklamebeskyttelse is absent. Records flagged with advertising protection must be excluded from marketing use entirely. This is a condition of the licence you accept to get access, so check the flag before any outreach.

Is there a paid getregdata actor for Denmark?

No, and there should not be. Denmark publishes an official structured distribution with no anti-bot wall, so there is nothing for a scraper to add. The free skill above is the whole toolkit for Denmark; the paid actors exist for the jurisdictions that publish no equivalent.

All agent skills Paid registry coverage