Denmark Address Validator & Geocoder
Pricing
Pay per usage
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
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
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+longitudeand 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 actor | Google Maps Geocoding | Loqate / Twilio Lookup | |
|---|---|---|---|
| Denmark coverage | 2.5M addresses (official) | partial, normalized for international use | partial |
| Cost (1,000 addresses) | $10 | ~$5 + Google API fees + key management | $30+ |
| Source authority | Danish government (DAWA) | derived | derived |
| Includes municipality / region codes | yes | no | no |
| API key management | none | required | required |
| Data freshness | every minute | varies | weekly |
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 addressesconst 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 ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")# Reverse geocode a coordinate pairrun = 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 ApifyClientclient = 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
🔗 Related NexGenData Actors
🚀 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