# COA reception locations

The COA has no open file or API with its locations. Each location does have its own page on coa.nl with the capacity, the type of reception (reception centre, emergency shelter, housing for unaccompanied minors …), the term of the agreement with the municipality and the address. We read those pages every Monday, look up the address in the BAG and place it in the municipal boundaries. That gives the number of reception places per municipality and province.

- Publisher: Centraal Orgaan opvang asielzoekers
- Area: Netherlands · Finest detail: location
- Period: actuele stand · Refreshed: weekly
- Access: Open · Licence: Niet vermeld (website van het COA)
- Join keys: adres (postcode), gemeentecode (GM0000)
- Status: grijs · 261 locatiepagina's in de sitemap
- URL: https://www.coa.nl/nl/opvanglocaties-tijdens-de-asielprocedure

## What can you do with it?
- **Reception in your municipality.** Find the locations in a municipality, with capacity and until when the agreement with the municipality runs.
- **Places per resident.** Divide the reception places per municipality by the population (CBS) and compare municipalities and provinces.
- **Agreements that expire.** Read per location until when the agreement runs and see which places may disappear in the coming years.

## How to process it
1. **The list of locations.** The coa.nl sitemap lists every location page (addresses under /nl/locatie/). On 16 October 2026 there were 261.
   `https://www.coa.nl/sitemap.xml?page=1`
2. **Read the blocks on the page.** Capacity, type and agreement sit in infographic blocks (title, number, sentence); the order differs per page. The address is in the contact block. Do not copy names or contact details of staff.
   `https://www.coa.nl/nl/locatie/ter-apel-ter-apelervenen`
3. **Address to municipality.** Look up postcode and house number in the PDOK BAG WFS and place the point in the municipal boundaries. The PDOK Locatieserver is faster, but robots.txt of api.pdok.nl excludes it for scripts.
   `https://service.pdok.nl/lv/bag/wfs/v2_0?service=WFS&version=2.0.0&request=GetCapabilities`

## Interesting combinations
- Capacity versus occupancy → [coa-opvang](https://www.opendataindex.nl/en/bron/coa-opvang.md) via landelijk totaal. The monthly figures give the number of residents; this gives capacity per location. Note: not every location has a page.
- Reception in proportion → [cbs-kwb](https://www.opendataindex.nl/en/bron/cbs-kwb.md) via gemeentecode. Link to the population per municipality from the district and neighbourhood key figures.

## Similar sources
- [coa-opvang](https://www.opendataindex.nl/en/bron/coa-opvang.md): National monthly figures of residents, intake and outflow, as open data.

## What to watch out for
- **Not every location has a page.** The COA lists 329 locations in its infographic (12 October 2026); the sitemap has 261 location pages. Crisis emergency shelters of municipalities and safety regions are not included at all. The sum of capacity is therefore not total reception.
- **Capacity, not occupancy.** The page states the number of places, not how many people live there now. Ten pages state no capacity or put it in the wrong field (16 October 2026); they are not counted.
- **Read from a website.** This is not an API: if the COA changes the page layout, the harvest has to follow. The harvest stops when fewer than 80% of the pages can be read, and the previous state remains.

## API (Webpagina's (HTML) + sitemap; machineleesbaar via onze eigen index (JSON))

- Base: https://www.coa.nl
- Access: No key or account needed (tested)
- Formats: html, xml, json
- Size: 261 location pages in the sitemap (16 Oct 2026); the COA itself lists 329 locations (tested)
- Filtering: No query language at the COA. In our index you browse per province and municipality or search with q.; 

### Endpoints
- `GET /sitemap.xml?page=1`: The list of pages; locations are the URLs /nl/locatie/<name>. No lastmod per location.
- `GET /nl/locatie/{naam}`: One location (HTML, ~250 kB): infographic blocks Capaciteit (capacity), Type locatie (type) and Overeenkomst (agreement), plus the visiting address in the contact block.
- `GET https://www.opendataindex.nl/api/catalogus/coa-locaties?pad=/{provincie}/{gemeente}`: Our index as JSON: folders per province and municipality with counts (n), and the locations (key, title) per municipality. Without pad: the 13 province folders (incl. 'Onbekend').
- `GET https://www.opendataindex.nl/api/catalogus/coa-locaties?q={tekst}`: Search by name or place in our index (q=Ter Apel, q=Amsterdam).
- `GET https://www.opendataindex.nl/dataset/coa-locaties/{sleutel}`: Our page per location with capacity, type, agreement, address, municipality and province.

### Parameters
- `page`: Sitemap page; page 1 contains all location pages. (tested)
- `pad`: In our index: /<nr> for a province, /<nr>/<nr> for a municipality (see the children in the response). (tested)
- `q`: Search text in our index; empty returns an empty list. (tested)

### What a location page contains, and our index (6)
`Capaciteit` blokje, `Type locatie` blokje, `Overeenkomst` blokje, `og:title` tekst, `contactblok` tekst, `n / kinderen / items` JSON

### Limits and pitfalls
- No API and no documented limit. We read the 261 pages once a week, three at a time with a pause; a page came back in 0.2 s. (tested)
- Our index is cached on the CDN for an hour (s-maxage=3600); the state is that of the latest Monday harvest. (tested)
- The blocks appear in a different order per page: look them up by title (itemTitleAlt), not by position. The number in the Overeenkomst block is not a year ('40' for an agreement until 2040): read the date from the sentence. (tested)
- Do not copy names, phone numbers or email addresses of staff; those are on the pages too. (experience)
- Municipality and province are not on the page. We look up postcode and house number in the PDOK BAG WFS and place the point in the municipal boundaries (2025 division); for one location that failed (folder 'Onbekend', 16 Oct 2026). (tested)
- Our index only gives key and title per location; capacity, type and address are on our dataset page per location. (tested)

### Example
```
https://www.opendataindex.nl/api/catalogus/coa-locaties
```

## How to fetch it

### curl
```bash
curl -A "mijn-onderzoek/1.0 (+jij@voorbeeld.nl)" "https://www.coa.nl/sitemap.xml?page=1" | grep -o "https://www.coa.nl/nl/locatie/[^<\"]*" | sort -u
```

### python
```python
import re, requests

kop = {"User-Agent": "mijn-onderzoek/1.0 (+jij@voorbeeld.nl)"}
html = requests.get("https://www.coa.nl/nl/locatie/ter-apel-ter-apelervenen", headers=kop).text
# De kerngegevens staan in blokjes: titel, getal en een zin.
for blok in re.findall(r'<li class="infographic__item">(.*?)</li>', html, re.S):
    titel = re.search(r'itemTitleAlt">(.*?)<', blok, re.S).group(1).strip()
    zin = re.search(r'itemDescription">(.*?)</p>', blok, re.S)
    print(titel, "|", re.sub(r"<[^>]+>|\s+", " ", zin.group(1)).strip() if zin else "")
```

## What you can build with it
- [Asylum reception dashboard: national and per municipality](https://www.opendataindex.nl/en/bouwen/asielopvang-dashboard.md): A dashboard that shows how many people live in COA reception since 2016, how many arrive and leave, and how many reception places each municipality has, also per 1,000 residents.


## What is in it: 261 locations

All reception locations with their own page on coa.nl, by province and municipality, fetched every Monday. For each location the capacity, type, term of the agreement and address, as the page states them (in Dutch). We do not copy names or contact details of staff.

- Kinds: locatie 261
- Search: https://www.opendataindex.nl/api/catalogus/coa-locaties?q=… or the MCP function zoek_datasets with herkomst=coa-locaties
- Every row has its own page: https://www.opendataindex.nl/en/dataset/coa-locaties/<key>

### Folders
- Drenthe (12): Assen (1), Coevorden (1), Emmen (2), Hoogeveen (1), Meppel (1), Noordenveld (1), Tynaarlo (2), Westerveld (3)
- Flevoland (6): Almere (3), Dronten (1), Noordoostpolder (1), Zeewolde (1)
- Fryslân (12): De Fryske Marren (1), Harlingen (1), Leeuwarden (2), Ooststellingwerf (1), Opsterland (1), Smallingerland (3), Súdwest-Fryslân (1), Tytsjerksteradiel (1) …
- Gelderland (34): Apeldoorn (4), Arnhem (7), Berg en Dal (2), Berkelland (1), Doetinchem (1), Druten (1), Duiven (2), Ede (1) …
- Groningen (11): Eemsdelta (2), Groningen (3), Het Hogeland (2), Oldambt (1), Stadskanaal (1), Veendam (1), Westerwolde (1)
- Limburg (16): Beekdaelen (1), Echt-Susteren (1), Heerlen (2), Leudal (1), Maastricht (6), Peel en Maas (1), Sittard-Geleen (1), Valkenburg aan de Geul (1) …
- Noord-Brabant (27): 's-Hertogenbosch (1), Bergen op Zoom (1), Breda (1), Cranendonck (1), Deurne (1), Eersel (1), Eindhoven (5), Geldrop-Mierlo (1) …
- Noord-Holland (47): Alkmaar (1), Amstelveen (2), Amsterdam (12), Blaricum (1), Bloemendaal (1), Castricum (1), Den Helder (2), Dijk en Waard (2) …
- Onbekend (1): Onbekend (1)
- Overijssel (19): Almelo (1), Dalfsen (1), Deventer (3), Enschede (1), Haaksbergen (1), Hengelo (O.) (2), Hof van Twente (2), Kampen (2) …
- Utrecht (19): Amersfoort (2), Baarn (1), Leusden (2), Nieuwegein (3), Utrecht (7), Vijfheerenlanden (2), Wijk bij Duurstede (1), Zeist (1)
- Zeeland (8): Borsele (1), Goes (1), Kapelle (1), Middelburg (Z.) (2), Schouwen-Duiveland (1), Terneuzen (1), Vlissingen (1)
- Zuid-Holland (49): 's-Gravenhage (7), Alphen aan den Rijn (1), Barendrecht (1), Bodegraven-Reeuwijk (1), Delft (3), Dordrecht (1), Goeree-Overflakkee (2), Gorinchem (1) …

## Examples with real figures (2)

For each example the finding, the reference date and the call that fetches exactly these figures.

- **Reception places at COA locations by municipality: most Amsterdam (5,196 places), then Rotterdam and Westerwolde** (november 2026). Table COA-locatiepagina's (eigen oogst). [Example](https://www.opendataindex.nl/en/voorbeeld/coa-plaatsen-per-gemeente)
  - `https://www.coa.nl/sitemap.xml?page=1`
  - `https://www.coa.nl/nl/locatie/ter-apel-ter-apelervenen`
- **Reception places at COA locations by province: most Zuid-Holland (13,086 places), then Noord-Holland and Gelderland** (november 2026). Table COA-locatiepagina's (eigen oogst). [Example](https://www.opendataindex.nl/en/voorbeeld/coa-plaatsen-per-provincie)
  - `https://www.coa.nl/sitemap.xml?page=1`
  - `https://www.coa.nl/nl/locatie/ter-apel-ter-apelervenen`
