HomeAPIsCVR API
CVR API🇩🇰 CVR · enriched

CVR API: Danish business register data in one REST call

Denmark's CVR carries phone, email and website, which few registers do. The catch is the raw Elasticsearch endpoint and the three-week access process before you can call it. CompanyData gives you every Danish business, contacts included, through one REST API and a key issued on signup.

150 free calls in week one · No credit card · The same API covers 200+ countries
955,565
Danish businesses
40+
data fields per record
CVR
official numbers on every record
<200 ms
median response time
GET /api/company/search?nationalId=22756214
A.P. Møller - Mærsk A/S
Copenhagen, Denmark
Active
CVR number22756214
Legal formAktieselskab
Branchekode5020 · Sea transport
Employee band1000+
Websitemaersk.com
Source: CVR · sample200 OK · 161 ms
The basics

What is the CVR API?

Erhvervsstyrelsen runs Denmark's Central Business Register, the CVR, and by law anyone may access the grunddata. The main system-to-system route is a raw Elasticsearch 6.8 endpoint behind HTTP Basic auth. It is free, and it returns phone, email, website and change history alongside the CVR number, branchekode, legal form and address, which few registers do.

The friction is everywhere else. Access is a paperwork process with roughly three weeks of processing and a signed declaration, financials live in a separate index as XBRL and PDF documents rather than parsed figures, and beneficial owners were closed to the public in September 2025. CompanyData starts from the same register and hands it back with contacts, structured financials and group links included, in one API that also covers 200+ other countries in the same schema.

The official access, in short

  • Full grunddata over a raw Elasticsearch endpoint, free under CVR-loven section 18
  • Returns phone, email, website and full change history, rare for a register
  • Employee counts are present, but as bands rather than exact figures
  • Access is a roughly three-week paperwork process with a signed declaration
  • Financials only as XBRL and PDF documents in a separate offentliggoerelser index
  • One country, and beneficial owners closed to the public since September 2025
Try it live

Look up any Danish business

Register fields plus the enrichment layer, in one response. Pick a business, you need no key for the sample.

  • Official CVR number and branchekode on every record
  • Phone, email and website in the same call
  • The same request across 200+ countries
Side by side

CVR and CompanyData, field by field

The CVR carries more than most registers, contacts included, and our Danish contact data comes from the CVR itself, so those rows match by design. The difference is everything around them: structured financials, group structure, no access paperwork, and 200+ other countries in the same schema.

Data pointOfficial registerCompanyData API
Businesses in the file955,565
Name and binavne
CVR number325,738955,525
Registered address and post code325,734955,541
Branchekode and legal form
Employee countbands only✓ bands, plus size fields
Website154,398376,313
Phone number178,370342,892
Mobile number472,398
Business email165,239467,002
Director or contact238,931738,450
Revenue and structured financialsdocuments in a separate index✓ structured fields
Group structure✓ included
Access~3 week paperwork process✓ API key on signup
International records365M worldwide

Our column counts every registered entity we hold for this country, active or inactive. Some registers only serve active entities through their API, which we think is a gap: a holding or a trust can be dormant and still matter as an entity, so we keep it. Measured live in our own file, August 2026, and refreshed monthly.

Access and integration

The official route is a raw Elasticsearch 6.8 endpoint you reach after a signed declaration and roughly three weeks of processing, then you page it with scroll and remember to delete the scroll. CompanyData is one REST call with a key you get on signup, same fields, no paperwork.

Price and coverage

The CVR is free, and so are its contacts. What it does not give you is exact structured financials, group structure or anything outside Denmark. CompanyData adds those and runs the same request across 200+ countries, from EUR 0.02 per credit with 150 free calls in week one.

See the difference

More than the CVR alone hands back

Structured revenue, group links and the fields the CVR only ships as documents, one lookup away. Denmark by default, switch country when you want.

Try one:
Best practice

Connecting to the official CVR yourself

The official access is capable but has sharp edges. Here is how you get in, and the six things that cost small teams the most time, whether you enrich with us or not.

1

Request system-to-system access

Apply through datacvr.virk.dk and email cvrselvbetjening@erst.dk. You sign a declaration about advertising-protected units, and processing takes roughly three weeks.

2

Connect with HTTP Basic auth

The main route is a raw Elasticsearch 6.8 endpoint at distribution.virk.dk/cvr-permanent. Credentials go in as HTTP Basic, not a bearer token.

3

Page bulk pulls with scroll

Elasticsearch 6 puts mapping types in the path and caps size, so scroll is the only bulk mechanism. Remember to delete the scroll when you finish, or you leak it.

Honest take: if you want to verify a handful of CVR numbers and you can wait out the access process, the official route is a fair deal and even ships contacts. If you need structured financials, group structure, a key today or coverage beyond Denmark, that is where we come in.

Get your API key
01

There is no single CVR API

Erhvervsstyrelsen runs several routes and confusing them is the main integration risk. The one to build on is the raw Elasticsearch endpoint, not the browser-facing lookups.

02

Access is paperwork, not a signup form

You email cvrselvbetjening@erst.dk, sign a declaration about advertising-protected units and wait around three weeks. Plan the timeline in from the start.

03

CVR number, P-nummer and SE-nummer are three things

The CVR number is 8 digits with a modulus-11 check and is never reused. A P-nummer is 10 digits and identifies a production unit, not a business, and the SE-nummer is a separate tax series that can legitimately differ.

04

Financials sit in a separate index

They are not in the CVR grunddata. The offentliggoerelser index refreshes every ten minutes and serves gzipped XBRL and PDF documents, so you parse them yourself before you have a revenue figure.

05

Respect reklamebeskyttelse

Each contact field carries its own hemmelig flag and units carry reklamebeskyttet. Breaching the advertising protection is criminally punishable under section 22, so honour the flags in your own flow. We ship them with the record.

06

Beneficial owners are closed to the public

Public access to reelle ejere ended on 1 September 2025 after the CJEU ruling. Access now needs a legitimate interest, which Erhvervsstyrelsen states explicitly includes third-party data providers.

Use cases

What teams use CVR data for

KYB and onboarding

Verify Danish counterparties on their CVR number. Status, legal form and registered address checkable automatically.

Lead generation

Build prospect lists filtered by branchekode, region, employee band or business size, contacts already attached.

CRM enrichment

Top up your Danish accounts with CVR numbers, branchekoder, phone, email and structured financials in bulk.

Risk and compliance

Track closures, bankruptcies and management changes across your Danish supplier base from the change history.

Form autofill

Type-ahead on business names in your signup form, so the CVR number and address arrive as the register writes them.

ERP and finance systems

Key suppliers and customers to a CVR number once, then keep name, status and address current automatically.

Beyond Denmark

Denmark is one of 200+ countries on the same API

The same request, the same response schema, from the CVR to Companies House, the Handelsregister and Sirene. Build the Danish connection once and take it across the border.

See the Company Data API
Denmark is one of 200+ countries on the same API

CVR API pricing

Transparent, credit-based pricing. Start with a free trial.

Free trial

Run your first 150 lookups free

  • 150 lookups and 10 exports in week one, key straight after signup
  • 1 credit per business returned, usage-based after that
  • No credit card, no contract, no sales call

Questions? Ask a human.

No ticket queue. Your question lands with our data team and you get an answer within 24 hours.

Amsterdam HQVijzelgracht 53D · +31 20 705 2360
BerlinFriedrichstraße 123 · +49 30 21480480
DubaiBuilding A1, Dubai Digital Park, Dubai Silicon Oasis

Mon to Fri 9:00 to 17:30 CET · info@companydata.com

What our customers say

Real feedback from the people using CompanyData every day.

9.2/10 on Kiyoh from verified reviews

★★★★

A reliable partner for years, responsive, efficient, and high-quality.

Ann Sofie Westlake
Ann Sofie Westlake
Head of Marketing, Quartix
★★★★★

The best data company we have worked with.

Helmut Huberti, M.D.
Helmut Huberti, M.D.
World Arthrosis Org., Heidelberg
★★★★★

Great feedback from our team on the data quality.

Stefania Guerra
Stefania Guerra
Dyson, Milan

Frequently asked questions

What is the CVR API?

The CVR API is how you reach Denmark's Central Business Register (Det Centrale Virksomhedsregister) from your own systems. Erhvervsstyrelsen runs it as a raw Elasticsearch endpoint, and it returns the CVR number, name, binavne, address, branchekode, legal form, employee band and change history, plus phone, email and website.

Is the CVR API free?

Yes. Access to the grunddata is free under CVR-loven section 18. The cost is not money but time and integration: you sign a declaration, wait roughly three weeks for access, and then work against a raw Elasticsearch 6.8 endpoint with HTTP Basic auth.

With CompanyData you get a key on signup and 150 free lookups in week one, then pay on usage.

Does the CVR return phone numbers and email addresses?

Yes, and this is unusual for a business register. The CVR carries phone, fax, email and website, each with its own hemmelig flag, alongside the reklamebeskyttet advertising-protection flag. We ship those flags with the record so you can honour them.

What the CVR does not give you is exact structured financials or group structure. That is where the enrichment layer earns its place.

How do I get access to the CVR?

You apply for system-to-system access through datacvr.virk.dk and email cvrselvbetjening@erst.dk, sign a declaration about advertising-protected units, and wait roughly three weeks. After that you connect to the Elasticsearch endpoint with HTTP Basic auth.

Where are Danish financials, and can I get revenue?

Financials are not in the CVR grunddata. They sit in a separate offentliggoerelser index, refreshed every ten minutes and served gzipped as XBRL and PDF documents, so you parse them yourself before you have a figure. CompanyData delivers revenue and results as structured fields instead.

What is the difference between a CVR number and a P-nummer?

A CVR number is the 8-digit identifier of a legal unit, with a modulus-11 check digit, never reused. A P-nummer is a 10-digit identifier for a production unit (a physical place of business), not the business itself, and the SE-nummer is a separate tax series that can legitimately differ from the CVR number.

What happened to beneficial owners in the CVR?

Public access to beneficial owners (reelle ejere) ended on 1 September 2025 after the Court of Justice ruling in joined cases C-37/20 and C-601/20. Access now requires a legitimate interest, which Erhvervsstyrelsen states explicitly includes third-party data providers.

How many Danish businesses do you cover?

954,360 Danish registrations, kept current from the CVR and other official sources, with contacts, structured financials and group links attached where available.

Run 150 free API calls before you spend anything

Tell us which Danish businesses you need. You get a trial key with 150 lookups and 10 exports, plus a real sample response for your target segment, within 24 hours.

or call +31 (0)20 705 2360

Call us: +31 (0)20 705 2360