Denmark CVR Company Registry Scraper
Pricing
from $12.75 / 1,000 results
Denmark CVR Company Registry Scraper
Look up Danish companies by name or CVR number and export official registry records: CVR/VAT, name, status, legal form, address, industry code, employees, start date and published phone or email. Export to JSON, CSV or Excel.
Pricing
from $12.75 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
14 hours ago
Last modified
Categories
Share
Denmark CVR Company Registry Scraper
Here is one real result, with every field the actor returns (the productionUnits array is trimmed from 217 entries to 2 here for readability; the actor returns all of them):
{"cvr": 24256790,"name": "NOVO NORDISK A/S","status": "Active","active": true,"legalFormCode": 60,"legalForm": "Aktieselskab","address": "Novo Alle 1","addressCareOf": null,"zipcode": "2880","city": "Bagsværd","cityName": null,"phone": "44448888","email": null,"fax": null,"employees": 27975,"industryCode": 212000,"industry": "Fremstilling af farmaceutiske præparater","startDate": "28/11 - 1931","endDate": null,"bankrupt": false,"creditStatus": null,"protected": false,"owners": null,"productionUnits": [{"pno": 1017661031,"name": "NOVO NORDISK A/S","address": "Krogshøjvej 42","zipcode": "2880","city": "Bagsværd","phone": null,"email": null,"employees": null,"industry": "Fremstilling af farmaceutiske præparater","main": false},{"pno": 1027629454,"name": "Novo Nordisk A/S - GA","address": "Hallas Alle 108D","zipcode": "4400","city": "Kalundborg","phone": null,"email": null,"employees": 1,"industry": "Fremstilling af farmaceutiske præparater","main": false}],"url": "https://datacvr.virk.dk/enhed/virksomhed/24256790","aiSummary": "NOVO NORDISK A/S is an active Danish company operating as an Aktieselskab (public limited company) in the pharmaceutical manufacturing industry. Founded on November 28, 1931, and based in Bagsværd, the company employs approximately 27,975 people and specializes in the production of pharmaceutical preparations.","aiRiskFlags": [],"aiRiskLevel": "low","aiIndustry": "Pharmaceutical Manufacturing","source": "Denmark CVR","observedAt": "2026-08-14T07:13:22.479Z"}
The most complete Danish CVR company scraper available. It returns every field the official CVR registry exposes for a company (CVR/VAT, legal form, address, industry, employees, start date, published phone and email), adds all production units (P-numbers) with their own addresses and contacts, and offers opt-in AI and contact-enrichment add-ons so you can target exactly the company records you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor takes one or more company names or 8-digit CVR numbers, resolves each to its official Danish company registry record, and writes one normalized record per company to the run's dataset. Each record carries the CVR/VAT number, registered name, status, legal form, full registered address, primary industry code and description, employee count, start date, and any published phone or email. Every production unit (P-nummer) belonging to the company is returned with its own address, industry, and contact details, so you get the full corporate footprint, not just the headquarters.
Missing source values are returned as null, never invented. Optional paid add-ons can attach a plain-English AI company summary, AI KYB risk flags, an AI industry sector, and a best-effort public contact email plus contact name.
Quickstart
Open the actor, paste this into the input, and press Run. It returns the official CVR record for Novo Nordisk.
{"searchQuery": "Novo Nordisk","maxCompanies": 1}
Pass several companies at once by separating names or CVR numbers with commas or new lines, for example Novo Nordisk, Maersk, 33256708. Every field except searchQuery is optional.
Input reference
| Field | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
searchQuery | string | no | (empty) | One or more company names or 8-digit CVR numbers, separated by commas or new lines. Each entry returns the best matching Danish company record. | Novo Nordisk, 33256708, Carlsberg |
maxCompanies | integer | no | 10 | Maximum number of company records to collect. | 25 |
enrichContacts | boolean | no | false | Paid add-on. For each result without an email, attempt to find a public business contact email and a contact person's name. Billed per attempt, plus an extra charge only when an email is found. | true |
enrichContactsMax | integer | no | 50 | Cap how many results the add-on tries to enrich, to control add-on cost. Free Apify accounts are capped at 3. | 20 |
withSummary | boolean | no | false | AI add-on. Generate a concise plain-English overview of each company from its registry data. Billed per successful summary. Disabled on free plans. | true |
withRiskFlags | boolean | no | false | AI add-on. Surface compliance red flags (bankruptcy, ceased, poor credit, very recent formation) and an overall risk level. Billed per successful analysis. Disabled on free plans. | true |
withIndustry | boolean | no | false | AI add-on. Classify each company into a broad industry sector. Billed per successful classification. Disabled on free plans. | true |
Output reference
One dataset item per company. Types: string, integer, boolean, string[], object[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
cvr | integer | Official Danish CVR/VAT number (unique per company). |
name | string | Registered company name. |
status | string | Registry status: Active or Ceased. |
active | boolean | true when the company is currently active. |
legalFormCode | integer | Numeric legal form code. |
legalForm | string | Legal form description, for example Aktieselskab. |
address | string | Registered street address. |
addressCareOf | string | Care-of (c/o) line when present, else null. |
zipcode | string | Postal code. |
city | string | City of the registered address. |
cityName | string | Alternate city name when present, else null. |
phone | string | Published phone number when available. |
email | string | Published email when available. |
fax | string | Published fax number when available. |
employees | integer | Reported number of employees. |
industryCode | integer | Primary industry code. |
industry | string | Primary industry description (Danish). |
startDate | string | Registration / start date as published by the registry. |
endDate | string | Cessation date when the company has ceased, else null. |
bankrupt | boolean | true when flagged as bankrupt, else false or null. |
creditStatus | string | Published credit / insolvency status, or null. |
protected | boolean | true when the entity has address protection. |
owners | string[] | Listed legal owner names when published, else null. |
productionUnits | object[] | Production units (P-numbers) belonging to the company. Each has pno, name, address, zipcode, city, phone, email, employees, industry, and main. |
url | string | Direct link to the company on the public registry. |
aiSummary | string | AI plain-English company overview (opt-in), else null. |
aiRiskFlags | string[] | AI KYB compliance red flags (opt-in), else null. |
aiRiskLevel | string | AI overall risk level low/medium/high (opt-in), else null. |
aiIndustry | string | AI broad industry sector (opt-in), else null. |
enrichedEmail | string | Contact-enrichment email when the add-on is enabled and one is found. |
enrichedContactName | string | Contact-enrichment person name when found. |
enrichedJobTitle | string | Contact-enrichment job title when found. |
enrichedEmailStatus | string | Deliverability status of the enriched email. |
enrichedSource | string | Source URL the enriched contact was found on. |
enrichedConfidence | number | Confidence score of the enriched contact. |
source | string | Data source label. Always Denmark CVR. |
observedAt | string | ISO 8601 timestamp of when the record was read. |
error | string | Present only on a failed lookup item; carries the failure reason. |
Example output record
Real record from a live run (input {"searchQuery": "Novo Nordisk", "maxCompanies": 1, "withSummary": true, "withRiskFlags": true, "withIndustry": true}), with productionUnits trimmed from 217 entries to 1 for brevity:
{"cvr": 24256790,"name": "NOVO NORDISK A/S","status": "Active","active": true,"legalFormCode": 60,"legalForm": "Aktieselskab","address": "Novo Alle 1","zipcode": "2880","city": "Bagsværd","phone": "44448888","email": null,"employees": 27975,"industryCode": 212000,"industry": "Fremstilling af farmaceutiske præparater","startDate": "28/11 - 1931","endDate": null,"bankrupt": false,"protected": false,"owners": null,"productionUnits": [{"pno": 1017661031,"name": "NOVO NORDISK A/S","address": "Krogshøjvej 42","zipcode": "2880","city": "Bagsværd","employees": null,"industry": "Fremstilling af farmaceutiske præparater","main": false}],"url": "https://datacvr.virk.dk/enhed/virksomhed/24256790","aiSummary": "NOVO NORDISK A/S is an active Danish company operating as an Aktieselskab (public limited company) in the pharmaceutical manufacturing industry. Founded on November 28, 1931, and based in Bagsværd, the company employs approximately 27,975 people and specializes in the production of pharmaceutical preparations.","aiRiskFlags": [],"aiRiskLevel": "low","aiIndustry": "Pharmaceutical Manufacturing","source": "Denmark CVR","observedAt": "2026-08-14T07:13:22.479Z"}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~denmark-cvr-companies-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQuery":"Novo Nordisk, Maersk, Carlsberg","maxCompanies":10}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~denmark-cvr-companies-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQuery":"33256708","maxCompanies":1,"withRiskFlags":true}'
Apify CLI:
apify call scrapers_lat/denmark-cvr-companies-scraper \--input '{"searchQuery":"Novo Nordisk"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per company record returned (
resultevent). See the pricing tab for the current per-result price. - Opt-in add-ons are billed separately. AI company summary, AI KYB risk flags, AI industry classification, and contact enrichment each charge only when they succeed and only when you enable them.
- No charge on failure. If a lookup fails or the source rate-limits the run, the actor writes an item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 records per run, and contact enrichment is capped at 3 attempts. AI add-ons are disabled on free plans. Upgrade for higher limits.
FAQ and troubleshooting
A run returned "no match". Why? No Danish company matched that name or CVR number closely enough. Try the exact registered name or the 8-digit CVR number. No-match entries are not charged.
Can I look up several companies at once?
Yes. Put multiple names or CVR numbers in searchQuery, separated by commas or new lines. Each entry returns one best-matching record.
Why is email or owners null?
The registry did not publish that value for the company. Missing source values are returned as null, never invented. Enable the contact-enrichment add-on to attempt to find a public business email.
The run says it was rate-limited. What do I do?
The Danish registry occasionally rate-limits heavy traffic. The actor rotates residential exit IPs and retries automatically; if it still hits a wall it writes an error item (not charged). Retry in a few minutes.
What are production units?
A Danish company can have many production units (P-numbers), each a physical site with its own address, industry, and sometimes its own phone or employees. All of them are returned in productionUnits.
Is this an official CVR tool? No. This actor is independent and has no affiliation with the Danish Business Authority or the CVR registry. It reads only data that is publicly available. Use it in accordance with the source's terms.
Related scrapers
- Norway Companies Scraper: Norwegian company registry records.
- Finland Companies Scraper: Finnish company registry records.
- Belgium KBO Companies Scraper: Belgian KBO/BCE company records.
- Estonia Business Register Scraper: Estonian company registry records.
- GLEIF LEI Company Records Scraper: Global Legal Entity Identifier records.
- EU VAT VIES Validation Scraper: Validate EU VAT numbers via VIES.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with the Danish Business Authority or the CVR registry. Accesses only publicly available company data. Use in accordance with the source's terms of service.
