Denmark Address Validator & Geocoder avatar

Denmark Address Validator & Geocoder

Pricing

Pay per usage

Go to Apify Store
Denmark Address Validator & Geocoder

Denmark Address Validator & Geocoder

Validate, normalize & geocode any Danish address using DAWA — Denmarks official open registry of 2.5M+ addresses. Forward, reverse & postcode lookup with municipality & region codes. No API key needed.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Stephan Corbeil

Stephan Corbeil

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

🇩🇰 Denmark Address Validator & Geocoder

Validate, normalize, and geocode any Danish address using DAWA — the official open-data registry of all 2.5M+ addresses in Denmark.

This actor wraps Denmark's free DAWA (Danmarks Adresser Web API) — the authoritative source maintained by Styrelsen for Dataforsyning og Effektivisering. It returns clean, schema-mapped address records with GPS coordinates, postal codes, municipality codes, and region info — perfect for CRM cleanup, logistics routing, and Danish e-commerce.

What it does

Three modes, one actor:

  • Forward geocoding — fuzzy-match a free-text Danish address (with typos, partial input, or just a street name) and get back validated, normalized records with coordinates.
  • Reverse geocoding — supply a latitude + longitude and get the closest official Danish address.
  • Postcode listing — supply a 4-digit Danish postcode (e.g. 1050) and list addresses inside it, useful for delivery zone enrichment.

Why use this instead of Google Maps Geocoding?

This actorGoogle Maps GeocodingLoqate / Twilio Lookup
Denmark coverage2.5M addresses (official)partial, normalized for international usepartial
Cost (1,000 addresses)$10~$5 + Google API fees + key management$30+
Source authorityDanish government (DAWA)derivedderived
Includes municipality / region codesyesnono
API key managementnonerequiredrequired
Data freshnessevery minutevariesweekly

For Denmark specifically, DAWA is the source of truth that everyone else derives from. This actor lets you tap it directly, normalize the output to English-friendly field names, and bulk-process address lists without writing your own client.

Example output

{
"id": "0b6a0c6f-ed2b-4cc7-9b29-956bdfe670fd",
"address": "Nørrebrogade 10, 2200 København N",
"street": "Nørrebrogade",
"house_number": "10",
"floor": null,
"door": null,
"postcode": "2200",
"city": "København N",
"municipality_code": "0101",
"municipality": "København",
"region_code": "1084",
"region": "Region Hovedstaden",
"longitude": 12.5535,
"latitude": 55.6915,
"darstatus": 3
}

Use cases

  • CRM data quality — normalize messy customer-entered Danish addresses into validated records with coordinates.
  • E-commerce checkout — fuzzy-match partial customer input ("Strandboulevarden 14") to pick the right official address before charging.
  • Delivery routing — bulk-geocode shipping addresses to feed into route optimization.
  • Real estate & lead enrichment — tie a Danish street address to its municipality and region for territory assignment.
  • Compliance & KYC — verify a Danish address actually exists in the official registry.

Quick start

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
// Forward geocode a list of addresses
const run = await client.actor('nexgendata/denmark-address-validator').call({
mode: 'forward',
queries: [
'Rådhuspladsen 1, 1599 København',
'Strandboulevarden 14, Aarhus',
'Nørrebrogade 10'
],
max_results: 3
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
# Reverse geocode a coordinate pair
run = client.actor("nexgendata/denmark-address-validator").call(run_input={
"mode": "reverse",
"latitude": "55.6761",
"longitude": "12.5683",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Frequently asked questions

Does this work for Faroe Islands and Greenland? DAWA covers metropolitan Denmark only. For Faroe Islands or Greenland addresses, you'll need a different source.

Does it handle apartments and floors? Yes — the floor and door fields surface when DAWA has them. Forward queries with apartment-level input ("Nørrebrogade 10, 3. tv") will match accordingly.

What's the rate limit? DAWA itself has no documented per-IP rate limit, but this actor adds a polite 150ms delay between requests in bulk mode to keep the upstream healthy. Expect ~6 queries/sec sustained.

Why is reverse geocoding limited to one result? Reverse always returns the single closest address — that's how DAWA's adgangsadresser/reverse endpoint behaves. To explore neighbors, switch to postcode mode.

Can I export to Google Sheets / CSV? Yes — Apify's dataset export options include CSV, JSON, Excel, HTML, and RSS out of the box. Or pipe results through Make.com / Zapier into your destination of choice.

Pricing rationale

  • $0.005 per actor start — covers cold-start container resources.
  • $0.010 per validated address — Apify free users get $5/month credit, so a free user can validate ~500 Danish addresses/month before topping up. For comparison, Google Maps Geocoding bills ~$5 per 1,000 addresses (plus key/billing setup), Loqate runs $30+ per 1,000. This actor delivers the official Danish source at competitive bulk pricing with zero API-key management overhead.

About NexGenData

Built by NexGenData — we maintain a fleet of 160+ actors targeting markets where the incumbents are either expensive, locked behind enterprise sales, or simply absent. Browse the full catalogue at thenextgennexus.com.

Found a bug or want a feature? Open an issue on the actor's Apify page or reach out via thenextgennexus.com.

💻 Code Example — Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("nexgendata/denmark-address-validator").call(run_input={
# Fill in the input shape from the actor's input_schema
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

🌐 Code Example — cURL

curl -X POST "https://api.apify.com/v2/acts/nexgendata~denmark-address-validator/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{ /* input schema */ }'

❓ FAQ

Q: How do I get started? Sign up at apify.com, grab your API token from Settings → Integrations, and run the actor via the Apify console, API, Python SDK, or any integration (Zapier, Make.com, n8n).

Q: What's the typical cost per run? See the pricing section below. Most runs finish under $0.10 for typical batches.

Q: Is this actor maintained? Yes. NexGenData maintains 165+ Apify actors and ships updates regularly. Bug reports via the Apify console issues tab get responses within 24 hours.

Q: Can I use the output commercially? Yes — you own the output data. Check the target site's Terms of Service for any usage restrictions on the scraped content itself.

Q: How do I handle rate limits? Apify manages concurrency and retries automatically. For very large batches (10K+ items), run multiple smaller jobs in parallel instead of one mega-job for better reliability.

💰 Pricing

Pay-per-event pricing — you only pay for what you actually extract.

  • Actor Start: $0.0001
  • result: $0.0050

🚀 Apify Affiliate Program

New to Apify? Sign up with our referral link — you get free platform credits on signup, and you help fund the maintenance of this actor fleet.

📚 More From NexGenData

Explore the full catalog, tutorials, Gumroad data packs, and newsletter at thenextgennexus.com — the brand home for everything we ship.

  • 📖 Tutorials & how-to guides
  • 🗂️ Full actor catalog with usage examples
  • 📦 Gumroad data packs (one-time purchases)
  • 📬 Newsletter — monthly drops of new actors and revenue experiments

Built and maintained by NexGenData — 165+ actors covering scraping, enrichment, MCP servers, and automation. 🏠 Home: thenextgennexus.com