# COA-opvanglocaties

Het COA heeft geen open bestand of API met zijn locaties. Wel heeft elke locatie een eigen pagina op coa.nl met de capaciteit, het type opvang (azc, noodopvang, opvang voor alleenstaande minderjarigen …), de looptijd van de bestuursovereenkomst met de gemeente en het adres. Wij lezen die pagina's elke maandag, zoeken het adres op in de BAG en leggen het in de gemeentegrenzen. Zo staat hier per gemeente en provincie hoeveel opvangplaatsen er zijn.

- Uitgever: Centraal Orgaan opvang asielzoekers
- Gebied: Nederland · Laagste detail: locatie
- Periode: actuele stand · Ververst: wekelijks
- Toegang: Open · Licentie: Niet vermeld (website van het COA)
- Koppelsleutels: adres (postcode), gemeentecode (GM0000)
- Status: grijs · 261 locatiepagina's in de sitemap
- URL: https://www.coa.nl/nl/opvanglocaties-tijdens-de-asielprocedure

## Wat kun je ermee?
- **Opvang in jouw gemeente.** Zoek de locaties in een gemeente, met capaciteit en tot wanneer de afspraak met de gemeente loopt.
- **Plaatsen per inwoner.** Deel de opvangplaatsen per gemeente door het inwonertal (CBS) en vergelijk gemeenten en provincies.
- **Overeenkomsten die aflopen.** Lees per locatie tot wanneer de bestuursovereenkomst loopt en zie welke plaatsen de komende jaren kunnen verdwijnen.

## Zo verwerk je het
1. **De lijst van locaties.** De sitemap van coa.nl noemt elke locatiepagina (adressen onder /nl/locatie/). Op 16 oktober 2026 waren dat er 261.
   `https://www.coa.nl/sitemap.xml?page=1`
2. **Lees de blokjes op de pagina.** Capaciteit, type en overeenkomst staan in infographic-blokjes (titel, getal, zin); de volgorde verschilt per pagina. Het adres staat in het contactblok. Neem geen namen of contactgegevens van medewerkers over.
   `https://www.coa.nl/nl/locatie/ter-apel-ter-apelervenen`
3. **Adres naar gemeente.** Zoek postcode en huisnummer op in de BAG-WFS van PDOK en leg het punt in de gemeentegrenzen. De PDOK Locatieserver is sneller, maar robots.txt van api.pdok.nl sluit die uit voor scripts.
   `https://service.pdok.nl/lv/bag/wfs/v2_0?service=WFS&version=2.0.0&request=GetCapabilities`

## Interessante koppelingen
- Capaciteit tegen bezetting → [coa-opvang](https://www.opendataindex.nl/bron/coa-opvang.md) via landelijk totaal. De maandcijfers geven het aantal bewoners; hier staat de capaciteit per locatie. Let op: niet elke locatie heeft een pagina.
- Opvang naar verhouding → [cbs-kwb](https://www.opendataindex.nl/bron/cbs-kwb.md) via gemeentecode. Koppel aan het inwonertal per gemeente uit de kerncijfers wijken en buurten.

## Vergelijkbare bronnen
- [coa-opvang](https://www.opendataindex.nl/bron/coa-opvang.md): Landelijke maandcijfers van bewoners, instroom en uitstroom, als open data.

## Waar je op moet letten
- **Niet alle locaties hebben een pagina.** Het COA noemt in zijn infographic 329 locaties (12 oktober 2026); de sitemap heeft 261 locatiepagina's. Crisisnoodopvang van gemeenten en veiligheidsregio's valt er helemaal buiten. De som van de capaciteit is dus niet de totale opvang.
- **Capaciteit, geen bezetting.** De pagina noemt het aantal plaatsen, niet hoeveel mensen er nu wonen. Tien pagina's noemen geen capaciteit of zetten die in het verkeerde vak (16 oktober 2026); die tellen niet mee.
- **Gelezen van een website.** Dit is geen API: als het COA de opmaak van de pagina's verandert, moet de oogst mee. De oogst stopt als minder dan 80% van de pagina's te lezen is, en de vorige stand blijft dan staan.

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

- Basis: https://www.coa.nl
- Toegang: Geen sleutel of account nodig (getest)
- Formaten: html, xml, json
- Omvang: 261 locatiepagina's in de sitemap (16 okt 2026); het COA noemt zelf 329 locaties (getest)
- Filteren: Geen querytaal bij het COA. In onze index blader je per provincie en gemeente of zoek je met q.; 

### Endpoints
- `GET /sitemap.xml?page=1`: De lijst van pagina's; locaties zijn de adressen /nl/locatie/<naam>. Geen lastmod per locatie.
- `GET /nl/locatie/{naam}`: Eén locatie (HTML, ~250 kB): infographic-blokjes Capaciteit, Type locatie en Overeenkomst, plus het bezoekadres in het contactblok.
- `GET https://www.opendataindex.nl/api/catalogus/coa-locaties?pad=/{provincie}/{gemeente}`: Onze index als JSON: mappen per provincie en gemeente met aantallen (n), en de locaties (sleutel, titel) per gemeente. Zonder pad: de 13 provinciemappen (incl. 'Onbekend').
- `GET https://www.opendataindex.nl/api/catalogus/coa-locaties?q={tekst}`: Zoeken op naam of plaats in onze index (q=Ter Apel, q=Amsterdam).
- `GET https://www.opendataindex.nl/dataset/coa-locaties/{sleutel}`: Onze pagina per locatie met capaciteit, type, overeenkomst, adres, gemeente en provincie.

### Parameters
- `page`: Sitemappagina; pagina 1 bevat alle locatiepagina's. (getest)
- `pad`: In onze index: /<nr> voor een provincie, /<nr>/<nr> voor een gemeente (zie de kinderen in het antwoord). (getest)
- `q`: Zoektekst in onze index; leeg geeft een lege lijst. (getest)

### Wat er op een locatiepagina staat, en in onze index (6)
`Capaciteit` blokje, `Type locatie` blokje, `Overeenkomst` blokje, `og:title` tekst, `contactblok` tekst, `n / kinderen / items` JSON

### Limieten en valkuilen
- Geen API en geen gedocumenteerde limiet. Wij lezen de 261 pagina's één keer per week, drie tegelijk met een pauze; een pagina kwam in 0,2 s. (getest)
- Onze index wordt een uur op de CDN bewaard (s-maxage=3600); de stand is die van de laatste maandag-oogst. (getest)
- De blokjes staan per pagina in een andere volgorde: zoek op de titel (itemTitleAlt), niet op de plek. Het getal bij Overeenkomst is geen jaartal ('40' bij een overeenkomst tot 2040): lees de datum uit de zin. (getest)
- Neem geen namen, telefoonnummers of e-mailadressen van medewerkers over; die staan ook op de pagina's. (ervaring)
- Gemeente en provincie staan niet op de pagina. Wij zoeken postcode en huisnummer op in de BAG-WFS van PDOK en leggen het punt in de gemeentegrenzen (indeling 2025); bij één locatie lukte dat niet (map 'Onbekend', 16 okt 2026). (getest)
- Onze index geeft per locatie alleen sleutel en titel; capaciteit, type en adres staan op onze datasetpagina per locatie. (getest)

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

## Zo haal je het op

### 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 "")
```

## Wat je ermee kunt bouwen
- [Dashboard asielopvang: landelijk en per gemeente](https://www.opendataindex.nl/bouwen/asielopvang-dashboard.md): Een dashboard dat laat zien hoeveel mensen er in de COA-opvang wonen sinds 2016, hoeveel er binnenkomen en vertrekken, en hoeveel opvangplaatsen elke gemeente heeft, ook per 1.000 inwoners.


## Wat er allemaal in zit: 261 locaties

Alle opvanglocaties met een eigen pagina op coa.nl, per provincie en gemeente, elke maandag opgehaald. Per locatie de capaciteit, het type, de looptijd van de overeenkomst en het adres, zoals de pagina ze noemt. Namen en contactgegevens van medewerkers nemen we niet over.

- Soorten: locatie 261
- Zoeken: https://www.opendataindex.nl/api/catalogus/coa-locaties?q=… of de MCP-functie zoek_datasets met herkomst=coa-locaties
- Elke rij heeft een eigen pagina: https://www.opendataindex.nl/dataset/coa-locaties/<sleutel>

### Mappen
- 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) …

## Voorbeelden met echte cijfers (2)

Per voorbeeld de bevinding, de peildatum en de aanroep die precies deze cijfers ophaalt.

- **Opvangplaatsen op COA-locaties per gemeente: het meest Amsterdam (5.196 plaatsen), dan Rotterdam en Westerwolde** (oktober 2026). Tabel COA-locatiepagina's (eigen oogst). [Voorbeeld](https://www.opendataindex.nl/voorbeeld/coa-plaatsen-per-gemeente)
  - `https://www.coa.nl/sitemap.xml?page=1`
  - `https://www.coa.nl/nl/locatie/ter-apel-ter-apelervenen`
- **Opvangplaatsen op COA-locaties per provincie: het meest Zuid-Holland (13.086 plaatsen), dan Noord-Holland en Gelderland** (oktober 2026). Tabel COA-locatiepagina's (eigen oogst). [Voorbeeld](https://www.opendataindex.nl/voorbeeld/coa-plaatsen-per-provincie)
  - `https://www.coa.nl/sitemap.xml?page=1`
  - `https://www.coa.nl/nl/locatie/ter-apel-ter-apelervenen`
