! DAWA closes August 17, 2026we are ready.

Danish addresses
in your code in 30 seconds.

Drop-in replacement for DAWA. Change one line, add an API key — the rest works exactly as before. Autocomplete in ~70 ms (median).

No credit card 2.7M addresses indexed Updated hourly CC BY 4.0 · Climate Data Agency
Drop-in for
WordPress WooCommerce Shopify Magento PrestaShop DanDomain Shoporama
How you integrate

Create your first request in 30 seconds.

Click through the six API areas and see TypeScript code + JSON responses in action. Copy the examples directly into your project.

Search addresses, streets, and zip codes.

Lightning-fast search across 2.7M addresses with fuzzy matching, prefix-cache, and bulk-receiver routing. Responses in the order users expect.

  • Autocomplete p99 under 150 ms
  • Meilisearch + Redis prefix cache
  • Typo-tolerant (Soundex DK)
Read the autocomplete guide →
TypeScript SDKTypeScript
// npm install @danadresse/js
import { danadresse } from '@danadresse/js';

const client = danadresse({ apiKey: 'dawa_live_...' });
const hits = await client.autocomplete('Rådhuspladsen');
ResponseJSON
[
  { "text": "Rådhuspladsen 1, 1550 København V",
    "id": "0a3f50af-...",
    "municipality_code": "0101" },
  { "text": "Rådhuspladsen 2, 1550 København V", … }
]

Validate and correct typos automatically.

Classification into category A (exact), B (secure match), or C (uncertain). Ideal for checkout, CRM, or invoicing systems.

  • Category A / B / C scoring
  • Floor and door validation
  • Bulk: 100× cheaper per lookup
Read the data wash guide →
Validate inputcURL
curl -X POST https://api.danadresse.dk/datavask/adresser \
  -H 'X-Api-Key: dawa_live_...' \
  -d '{"street_name":"Rådhuspl","house_number":"1","zip_code":"1550"}'
ResponseJSON
{
  "category": "A",
  "results": [{
    "cleaning_result": { "score": 100 },
    "address": { "street_name": "Rådhuspladsen", ... }
  }]
}

Coordinates → nearest address.

WGS84 (EPSG:4326) or Danish standard ETRS89/UTM32 (EPSG:25832). Built-in bounding-box prefilter + Haversine distance.

  • Both SRID
  • Polygon constraint
  • Returns access address + coordinates
Read the reverse guide →
Python SDKPython
# pip install danadresse
from danadresse import Client

c = Client(api_key="dawa_live_...")
addr = c.reverse_geocode(12.568, 55.676)
ResponseJSON
{
  "id": "0a3f50af-...",
  "designation": "Rådhuspladsen 1, 1550 Copenhagen V",
  "reference point": { "coordinates": [12.568, 55.676] }
}

1,089 postal codes, all municipalities.

Complete list of Danish postal codes with municipality affiliation, bbox and visual center. Live updated from the Climate Data Agency.

  • 1,089 postal codes
  • 98 municipalities
  • Major recipients marked
Read the postal code guide →
SearchcURL
curl 'https://api.danadresse.dk/postnumre?q=K%C3%B8benhavn'
ResponseJSON
[
  { "nr": "1050", "name": "Copenhagen K" },
  { "nr": "1051", "name": "Copenhagen K" },
  { "nr": "2100", "name": "Copenhagen Ø" }
]

Up to 10,000 addresses in one request.

Price per 1,000 (not per call). Ideal for migrations, monthly calls or batch validation. 100× cheaper than loop-on-single-lookup.

  • 10,000 / request
  • Async processing
  • CSV upload supported
Read the batch guide →
Batch inputJSON
POST /batch/datavask
{
  "addresses": [
    { "vejnavn": "Rådhuspladsen", "husnr": "1" },
    { "vejnavn": "Strøget", "husnr": "42" }
  ]
}
Async responseJSON
{
  "job_id": "bat_abc123",
  "status": "processing",
  "webhook_url": "https://your.app/hook"
}

Keep your own copy updated.

Event stream with sequence number — just like DAWA's replication. Poll periodically, use insert/update/delete events transactionally.

  • sequence number pagination
  • Soft-delete (status=4)
  • Enterprise tier
Read the replication guide →
Poll latest eventscURL
curl 'https://api.danadresse.dk/replikering/adresser/haendelser?sekvensnummerfra=207145000'
Event streamJSON
[
  { "sekvensnummer": 207145001,
    "operation": "update",
    "tidspunkt": "2026-06-12T13:00:00Z",
    "data": { "id": "...", "vejnavn": "..." } }
]

Migrate from DAWA in one line

Same paths, same response shape. Just change the base URL and add your X-Api-Key — the rest of your code is unchanged.

Before — DAWA
curl "https://dawa.aws.dk/autocomplete?q=rådhuspladsen"
After — Danadresse
curl "https://api.danadresse.dk/autocomplete?q=rådhuspladsen" \
     -H "X-Api-Key: dawa_live_…"
Before — DAWA
fetch("https://dawa.aws.dk/autocomplete?q=rådhuspladsen")
After — Danadresse
fetch("https://api.danadresse.dk/autocomplete?q=rådhuspladsen", {
  headers: { "X-Api-Key": "dawa_live_…" }
})
Before — DAWA
requests.get("https://dawa.aws.dk/autocomplete",
             params={"q": "rådhuspladsen"})
After — Danadresse
requests.get("https://api.danadresse.dk/autocomplete",
             params={"q": "rådhuspladsen"},
             headers={"X-Api-Key": "dawa_live_…"})
Before — DAWA
$ctx = stream_context_create();
file_get_contents("https://dawa.aws.dk/autocomplete?q=rådhuspladsen", false, $ctx);
After — Danadresse
$ctx = stream_context_create(["http" => [
  "header" => "X-Api-Key: dawa_live_…"
]]);
file_get_contents("https://api.danadresse.dk/autocomplete?q=rådhuspladsen", false, $ctx);
Before — DAWA
http.Get("https://dawa.aws.dk/autocomplete?q=rådhuspladsen")
After — Danadresse
req, _ := http.NewRequest("GET",
  "https://api.danadresse.dk/autocomplete?q=rådhuspladsen", nil)
req.Header.Set("X-Api-Key", "dawa_live_…")
http.DefaultClient.Do(req)
Before — DAWA
await http.GetStringAsync(
  "https://dawa.aws.dk/autocomplete?q=rådhuspladsen");
After — Danadresse
http.DefaultRequestHeaders.Add("X-Api-Key", "dawa_live_…");
await http.GetStringAsync(
  "https://api.danadresse.dk/autocomplete?q=rådhuspladsen");
Get a free key →
More than addresses

The entire property — in one call.

Look up an address and get BFE, parcel, public valuation, BBR buildings, zoning status & local plans all in one. We join EBR + Matriklen + Property Valuation + BBR + Planning Data for you — you make one call.

  • 🏠 BFE + parcel — Determined Real Property, land parcel, ejerlav (cadastral district)
  • 💰 Public valuation — property & land value (latest year)
  • 🧱 BBR — year of construction, area, floors, usage
  • 🗺️ Zoning & local plans — urban zone/rural zone + adopted plans
  • ⛰️ Terrain level & ⚡ energy label (optional)

All from open public registers (CC BY 4.0), cached and lightning fast. Competitors charge per lookup for this.

Read the property data guide →
One call → entire propertycURL
curl 'https://api.danadresse.dk/api/v1/enrich/adresser/{id}/ejendom'
ResponseJSON
{
  "ejendomme": [{ "bfeNummer": "6033795",
     "vurdering": { "ejendomsvaerdi": 70000000,
                     "grundvaerdi": 47032400,
                     "vurderingsaar": 2020 } }],
  "zoning": { "zone": "Urban zone", "lokalplaner": [...] },
  "bygninger": [{ "opfoerelsesaar": 1680,
                 "samletBygningsareal": 4457 }]
}
Prices

Free to start. Pay only for what you use.

2,000 address lookups/month are free — forever. Change plan or cancel anytime. No commitment period, no setup fees, no surprises. Every plan includes the full data package — addresses, BBR building data, property valuation, climate risk and DAGI — plus our MCP server, so AI agents can look up addresses directly.

Pay annually – save 20%

Hobby

Side projects and prototypes.

0 DKK / mo
  • 2,000 API calls + 250 MCP calls/month
  • 1 key · 1 device · 1 IP (48h binding)
  • Bulk cleaning up to 1,000 rows
  • DAR · BBR · DAGI · IBAN/CVR/EAN validation
  • Community support
Start for free

up to 360 calls/min · no credit card

Basis

Small webshops and freelancers.

71 DKK / mo · billed yearly
  • 60,000 API calls + 5,000 MCP calls/mo
  • Overage: 0.001 DKK/call · MCP/enrich 0.05 DKK
  • 5 keys · 2 IP · 1 device per key
  • Bulk cleaning up to 100,000 rows
  • Distance + quality score endpoints
  • Climate risk + property data
  • Email support <24h
Choose Basis

up to 1,700 calls/min · full data package + MCP

Enterprise

2.5M calls, 100 keys.

From 399 DKK / mo · billed yearly
  • 2.5M API calls + 200k MCP calls (extra in 2.5M blocks)
  • No rate limit
  • 100 keys · 10 IP
  • Replication API
  • Dedicated support
Contact sales

SAML SSO · audit log · on-prem

All prices are B2B and exclude VAT. 25% Danish VAT is added at checkout; EU businesses with a valid VAT number are billed at 0% (reverse charge). Yearly billing is charged as one payment (Basis 852 DKK/yr · Pro 2,676 DKK/yr).

FAQ

Frequently asked questions

Is it really drop-in compatible with DAWA?

Yes. We implement 100% of DAWA's REST API with the same paths, query parameters, JSON fields, and address IDs (UUIDv4). Change the base URL to https://api.danadresse.dk and add an X-Api-Key header. The rest works.

Where does the address data come from?

Directly from the Climate Data Agency's authoritative DAR (Danish Address Register) — the same data foundation as DAWA. We fetch via /replikering until August 17, 2026, then directly from Datafordeleren. Data is CC BY 4.0.

What happens on August 17, 2026 when DAWA shuts down?

For you: nothing. We will switch the backend to Datafordeleren — and because address IDs are identical between DAWA and DAR, you will lose no references in your database. No code changes. No migration.

GDPR and data residency?

All servers operate in the EU (Germany). Address data is public (CC BY 4.0). We log API calls for 30 days pseudonymized for billing. No personal data leaves the EU. Read privacy policy.

What SDKs do you offer?

Official, open-source (MIT): TypeScript (@danadresse/js), Python (pip install danadresse). The REST API is DAWA-compatible, so all existing DAWA clients (Go, PHP, Ruby, Java, .NET, R) also work.

Can I get a demo or help with onboarding?

Certainly. Write to hello@lynbro.dk or book a 15-minute demo call. We also assist with DAWA migration directly.

More from LynBro
S søge.dk · Danish vehicles + companies API Check it out →
Ready?

Start now — 30 seconds.

1,000 free address lookups per month. No credit card. No commitment. Drop-in DAWA replacement if you already have an integration.

No commitment 2.7M addresses indexed Live updated Stripe + bank transfer