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.
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 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.
Getting an API key
- Email [email protected] to request a free CVR distribution account.
- 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.
- 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.
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 |
Running a KYB check end to end
- 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 Confirm it is real and current
Query by term on cvrNummer and read virksomhedsstatus. Record virksomhedsform, hovedbranche.branchekode, founding date and beliggenhedsadresse.
- 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 Its physical footprint
Query produktionsenhed for the production units (p-numre) operating under the entity.
- 5 Distress signals
A status of under dissolution or under bankruptcy is adverse - stop and escalate rather than continuing the check.
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.
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.
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.