# Open Archives (Open Archieven)

Open Archives by Coret Genealogie combines the genealogical data of 200 archives and societies, mostly Dutch, also Belgian and French. On 16 October 2026 the statistics API counted 368,475,032 records across 199 source types: civil registration of deaths, births and marriages, population registers, church baptism, marriage and burial registers, notarial records and more. A keyless REST API, SPARQL, OAI-PMH and file exports under CC BY 4.0.

- Publisher: Open Archieven (Coret Genealogie)
- Area: Netherlands · Finest detail: person in a record
- Period: per archief en brontype verschillend · Refreshed: quarterly
- Access: Open · Licence: CC BY 4.0 (bestandsexports); voor de API zelf geen aparte licentie gevonden
- Join keys: archiefcode (bv. saa, hua), record-identifier (GUID), naam, plaats en jaar
- Status: ok (2026-08-24) · 368.618.982 records in 200 archieven; nieuwste export
- URL: https://www.openarchieven.nl/api/docs/

## What can you do with it?
- **Where does a surname come from?.** Search a name and look by place: Huizinga returns 60,905 mentions, 5,891 of them with Groningen as the place. Put the places on a map.
- **Which archives hold the most?.** The Brabant Historical Information Centre (25.4 million records), Amsterdam City Archives (24.6 million) and Rotterdam City Archives (23.0 million) supply the most. Compare per province how much is online.
- **Historical demography.** Count death records per year and place via SPARQL (PiCo model) and look for peaks such as epidemics or war years. Compare with that day's weather via related/weather.
- **Occupations over time.** stats/professions returns the most frequently mentioned occupations for a place and period (1500 to 1960). Compare periods to see which occupations disappear and which emerge.

## How to process it
1. **Search by name.** records/search.json with name=, eventplace=, sourcetype= and archive_code=; number_show up to 100 per page and start for the next page (above 10,000 returns HTTP 400). The total is in response.number_found.
   `https://api.openarchieven.nl/1.1/records/search.json?name=Huizinga&eventplace=Groningen&number_show=10&lang=nl`
2. **Count without searching.** The statistics endpoints return in one call the counts per archive (stats/records), per source type (stats/sources) and the list of archives with ISIL code and website (stats/archives).
   `https://api.openarchieven.nl/1.1/stats/sources.json?lang=nl`
3. **Big questions with SPARQL.** Three SPARQL endpoints (QLever): oa-a2a (records), oa-pico (people in the PiCo model, 369,474,740 PersonObservations) and oa-pico-recon (reconstructed persons).
   `https://sparql.openarchieven.nl/oa-pico`
4. **Everything at once.** A compressed CSV, XML or N-Triples file per archive and source type under CC BY 4.0. The latest exports are from 23 and 24 August 2026.
   `https://www.openarchieven.nl/exports/csv/`
5. **Full API description.** The API has an OpenAPI 3.1 description as YAML (openapi.json does not exist). There is also an MCP server at mcp.openarchieven.nl.
   `https://api.openarchieven.nl/openapi.yaml`

## Interesting combinations
- Do the records match the official figures? → [cbs-statline](https://www.opendataindex.nl/en/bron/cbs-statline.md) via gemeente en jaar. Count death records per municipality and year and compare them with CBS mortality figures. Differences show which archives are not (yet) fully online.
- Where can I find more about this person? → [nationaal-archief](https://www.opendataindex.nl/en/bron/nationaal-archief.md) via naam en plaats. Find someone in Open Archives and then search the National Archives finding aids, for example military or colonial records.

## Similar sources
- [nationaal-archief](https://www.opendataindex.nl/en/bron/nationaal-archief.md): Describes whole central government archives (finding aids and scans), not the people in them.
- [WieWasWie](https://www.wiewaswie.nl): Also a search service for person records from Dutch archives, partly from the same sources. Compare the coverage for your place.
- [cbs-statline](https://www.opendataindex.nl/en/bron/cbs-statline.md): Official population figures (births, deaths, marriages) from around 1900, but no names.

## What to watch out for
- **Not only the Netherlands.** Of the 368.5 million records, 286.5 million come from Dutch archives (ISIL code NL- or a website in the nl domain). The largest participant is INSEE (France, 27.0 million); Reclaim The Records (US) and Belgian state archives also take part.
- **Masked names.** Some entries show a first name as ####, for example in a patient register. Do not assume every name is complete.
- **Records are not people.** One person appears in many records (birth, marriage, death, population register). Record counts say nothing about the number of people; use oa-pico-recon for that, and even that is a reconstruction.
- **Uneven coverage.** What is included depends on what each archive has transcribed and supplied. A place with few records may simply belong to an archive that does not (yet) take part.
- **Statistics sometimes empty.** stats/events.json returned an empty list on 16 October 2026. Later that day (around 10:00) stats/sources.json and stats/breakdown.json also returned nothing; stats/records.json per archive still worked and added up to 367,231,659 records in 209 archives.

## API (REST (JSON), SPARQL 1.1, OAI-PMH 2.0)

- Base: https://api.openarchieven.nl/1.1
- Access: No key. The API asks for a descriptive User-Agent and is throttled per IP address to 4 requests per second. (from the description)
- Formats: json, jsonp, xml, gedcom, turtle, n-triples, csv
- Size: 368618982 records in 200 archives according to stats/records.json (16 Oct 2026) (tested)
- Filtering: Separate query parameters per endpoint (name, archive_code, sourcetype, eventplace …). For questions about relations and counts across everything: SPARQL at sparql.openarchieven.nl.; veld=waarde, & (twee namen), ! (uitsluiten, breakdown), SPARQL

### Endpoints
- `GET /records/search.json`: Search by name (also two names with & and a year or period); filters on archive, source type, place, birthplace, role and country. Total in response.number_found.
- `GET /records/show.json`: One record in the A2A model (archive + identifier). Also as .xml, .gedcom, .ttl and .nt by changing the extension.
- `GET /records/match.json`: Match a person (name + birth year) to birth and death records.
- `GET /records/getBirths.json, /getDeaths.json, /getMarriages.json`: Birth, death and marriage records by name, year and place.
- `GET /stats/archives.json`: All archives with archive_code, ISIL code, name and website.
- `GET /stats/records.json`: Number of records per archive and per source type within it (archive_code= for one archive).
- `GET /stats/sources.json, /stats/events.json, /stats/comments.json`: Counts per source type, per event and comments. Returned an empty list on 16 Oct 2026.
- `GET /stats/breakdown.json`: Cross-tab: count per archive, source type, event, place or year (1500 to 1960) with filters. Returned HTTP 503 (error_code 52) on 16 Oct 2026.
- `GET /stats/familynames.json, /stats/firstnames.json, /stats/professions.json`: Most frequent surnames, first names and occupations for a place and period.
- `GET /related/weather.json`: Historical KNMI weather on a date and location (values in tenths, with a label per field).
- `GET /related/census.json`: Dutch census data for a place and year.
- `GET /transcriptions/search.json, /browse.json, /show.json`: Full-text search of transcribed pages, browse by archive and inventory, fetch one transcription.
- `GET https://sparql.openarchieven.nl/{oa-a2a|oa-pico|oa-pico-recon}`: Three SPARQL endpoints (QLever): records (A2A), person observations in PiCo, and reconstructed persons.
- `GET https://api.openarchieven.nl/oai-pmh/?verb=…`: OAI-PMH 2.0, format oai_a2a, 115 sets (one per archive), dates as YYYY-MM-DD.

### Parameters
- `name`: Search query: name, also two names with & and a year or period. (from the description)
- `archive_code`: Archive code from stats/archives (saa, gra, bhi …). In breakdown a leading ! excludes it. (from the description)
- `sourcetype`: Source type (e.g. 'BS Overlijden', 'DTB Dopen'). (from the description)
- `eventplace / birthplace`: Place of the event or birthplace. (from the description)
- `relationtype`: Role in the record (Bride, Groom, Registered …). (from the description)
- `country_code`: Country: nl, be, fr, sr … (from the description)
- `number_show`: Results per page, max 100 (breakdown: max 500 groups). (from the description)
- `start`: Offset, max 10,000; above that HTTP 400 with error_code 50. (tested)
- `sort`: 1=name, 2=role, 3=event, 4=date, 5=place, 6=source; negative = descending. (from the description)
- `group_by`: Breakdown only: archive, sourcetype, eventtype, place or year. (from the description)
- `year_start / year_end`: Breakdown and statistics only: 1500 to 1960. (from the description)
- `lang`: nl or en: language of archive names and labels. (from the description)
- `callback`: JSONP function name. (from the description)

### Fields in the responses (selection) (11)
`response.number_found` getal, `response.docs[].personname` tekst, `response.docs[].identifier` uuid, `response.docs[].archive_code / archive` tekst, `response.docs[].eventtype / relationtype` tekst, `response.docs[].eventdate` object, `response.docs[].eventplace` lijst, `response.docs[].sourcetype` tekst, `response.docs[].url` url, `Source.SourceReference (show.json)` object, `pico:PersonObservation (SPARQL)` klasse

### Limits and pitfalls
- 4 requests per second per IP address (OpenAPI description); more by arrangement. (from the description)
- Search: max 100 per page and offset up to 10,000 (above that HTTP 400, error_code 50). For everything: OAI-PMH or the file exports. (tested)
- SPARQL: heavy queries (GROUP BY over all triples of oa-a2a or oa-pico) returned HTTP 502 (proxy) after 30 seconds. A LIMIT query or a query about one subject answers within a second. (tested)
- On 16 Oct 2026 stats/sources.json returned an empty list after 10 seconds and stats/breakdown.json HTTP 503 with error_code 52 ('Service temporarily unavailable'). stats/records.json worked and counts per archive and per source type. (tested)
- Errors come as JSON with error_code and error_description; the HTTP status is correct (400, 503). (tested)
- API version 1.1 uses archive_code; older examples with archive= do not work for search.json. (from the description)
- Records are not people: one person appears in many records. Reconstructed persons are in oa-pico-recon (schema:spouse, parent, children, sibling). (tested)
- There is also an MCP server (mcp.openarchieven.nl) and OpenSearch descriptions per language. (from the description)

### Example
```
https://api.openarchieven.nl/1.1/records/search.json?name=Huizinga&eventplace=Groningen&number_show=3&lang=nl
```

## How to fetch it

### curl
```bash
curl -A "mijnproject/1.0 (mailto:jij@voorbeeld.nl)" "https://api.openarchieven.nl/1.1/records/search.json?name=Huizinga&number_show=5&lang=nl"
```

### python
```python
import requests

kop = {"User-Agent": "mijnproject/1.0 (mailto:jij@voorbeeld.nl)"}   # beschrijvende user-agent, zoals de API vraagt
r = requests.get("https://api.openarchieven.nl/1.1/records/search.json",
                 params={"name": "Huizinga", "eventplace": "Groningen", "number_show": 10, "lang": "nl"}, headers=kop)
d = r.json()["response"]
print(d["number_found"])
for x in d["docs"]:
    print(x["personname"], x["eventtype"], x["archive"])
```

## What you can build with it
- [Family tree finder: from one record to your great-grandparents](https://www.opendataindex.nl/en/bouwen/stamboomzoeker.md): Start with a birth record and let the app search back generation by generation through the marriage records of hundreds of Dutch archives, with a link to the National Archives inventory.


## What is in it: 1,360 archives and collections

All archives connected to Open Archives, by country, with the number of records per source type (baptism registers, population registers, memorial cards …), fetched every night. The country follows from the ISIL code or, without one, from the website's domain.

- Kinds: collectie 1,151, archief 209
- With an API call on the dataset page: 1,360
- Search: https://www.opendataindex.nl/api/catalogus/open-archieven?q=… or the MCP function zoek_datasets with herkomst=open-archieven
- Every row has its own page: https://www.opendataindex.nl/en/dataset/open-archieven/<key>

### Folders
- Nederland (1,209): Brabants Historisch Informatie Centrum (30), Stadsarchief Amsterdam (34), Stadsarchief Rotterdam (16), AlleFriezen (45), Gelders Archief (11), Het Utrechts Archief (19), Noord-Hollands Archief (19), Zeeuws Archief (50) …
- België (117): Rijksarchief België (Brussel) (8), Rijksarchief België (Leuven) (4), Stadsarchief Aalst (6), Doodsprentjes.be (2), Rijksarchief België (Gent) (6), Familiekunde Vlaanderen - regio Westkust (2), Rijksarchief België (Bergen) (4), Familiekunde Vlaanderen - regio Mandel en Leie (4) …
- Suriname (9): Nationaal Archief Suriname (9)
- Duitsland (2): Staats- und Universitätsbibliothek Hamburg Carl von Ossietzky (1), Staatsbibliothek zu Berlin - Preußischer Kulturbesitz (1)
- Frankrijk (2): L'Institut national de la statistique et des études économiques (INSEE) (2)
- Indonesië (2): Arsip Nasional Republik Indonesia (2)
- Verenigde Staten (1): New York City Municipal Archives (1)
- Land niet vastgesteld (18): Reclaim The Records (3), Geschied- en Heemkundige Kring De Goede Stede Hamont (2), Archief Gent (5), Historische Vereniging Tweestromenland (2), Erfgoedvereniging Dye van Best (2), Heemkunde kring Amalia van Solms (2), Documentatiecentrum Maaseik (2)

## Examples with real figures (2)

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

- **Records in Open Archives by Dutch archive: most Brabants Historisch Informatie Centrum (25,449,700 records), then Stadsarchief Amsterdam and Stadsarchief Rotterdam** (november 2026). Table stats/records + stats/archives. [Example](https://www.opendataindex.nl/en/voorbeeld/open-archieven-per-archief)
  - `https://api.openarchieven.nl/1.1/stats/records.json`
  - `https://api.openarchieven.nl/1.1/stats/archives.json`
- **Records in Open Archives by source type: most civil registration deaths (88,570,491 records), then population register and civil registration births** (november 2026). Table stats/sources. [Example](https://www.opendataindex.nl/en/voorbeeld/open-archieven-per-brontype)
  - `https://api.openarchieven.nl/1.1/stats/sources.json?lang=nl`
