# National Archives of the Netherlands, finding aids and scans

The National Archives publish their finding aids as open data (CC0) via OAI-PMH, in EAD XML. On 16 October 2026 there were 7,411 finding aids (7,442 sets), each with the description of the archive and its inventory numbers. Where scans exist, each inventory number has a METS file linking to the images (public domain or CC0). Finding aids made by third parties (2.8 percent) are not open data.

- Publisher: Nationaal Archief
- Area: Netherlands · Finest detail: inventory number
- Period: per archief verschillend (zie de inventaris) · Refreshed: daily
- Access: Open · Licence: CC0 (inventarissen; 2,8% uitgezonderd), publiek domein of CC0 (scans)
- Join keys: toegangsnummer (bv. 1.04.02 of 2.05.170), inventarisnummer
- Status: ok (2026-10-16) · 7.411 inventarissen; 12 gewijzigd in de laatste 3 dagen
- URL: https://www.nationaalarchief.nl/onderzoeken/open-data/archiefinventarissen-digitale-objecten-en-scans-van-archieven

## What can you do with it?
- **What is in an archive?.** Fetch one finding aid with GetRecord and the access number, for example 2.21.205.69 (W.D. Walkate collection, 1945-1985). You get the description, the period and all inventory numbers.
- **Scans from the colonial archives.** The finding aid of the Batavia aldermen's court (1.04.18.03) links 68 inventory numbers to METS files with scans. Use them to build a gallery of original documents.
- **What changed this month?.** ListIdentifiers with from= returns the finding aids updated since a date: 269 since 1 October 2026. Follow which archives are being extended or revised.
- **A map of the national archives.** Harvest all finding aids (7,411 records, 50 per page) and count by main group of the access number and by period. That is heavy work; do it once and keep the result.

## How to process it
1. **Fetch one finding aid.** The access number is the identifier. Note: the address contains an exclamation mark; put it in single quotes in the shell.
   `https://service.archief.nl/gaf/oai/!open_oai.OAIHandler?verb=GetRecord&metadataPrefix=oai_ead&identifier=2.21.205.69`
2. **What is new?.** ListIdentifiers with from and until returns identifiers and datestamps, 50 per page. The total is in completeListSize of the resumptionToken.
   `https://service.archief.nl/gaf/oai/!open_oai.OAIHandler?verb=ListIdentifiers&metadataPrefix=oai_ead&from=2026-10-01T00:00:00Z`
3. **From inventory number to scan.** In the EAD an inventory number with scans links to a METS file (service.archief.nl/gaf/api/mets/v1/…). It lists the addresses of the individual images as JPEG.
   `https://service.archief.nl/gaf/api/mets/v1/48f1f22f-1228-4b00-9720-5816a07b4003`
4. **Which finding aids are not open?.** The National Archives keep a list of finding aids whose copyright lies with third parties, also as CSV. Check it before you reuse a finding aid.
   `https://www.nationaalarchief.nl/onderzoeken/open-data/archiefinventarissen-digitale-objecten-en-scans-van-archieven`

## Interesting combinations
- What was printed while this archive was created? → [kb-linked-data](https://www.opendataindex.nl/en/bron/kb-linked-data.md) via jaar en onderwerp. Put an archive's period next to the STCN titles from the same years, for example pamphlets from 1672 next to the States General records.
- Who appears in this archive? → [open-archieven](https://www.opendataindex.nl/en/bron/open-archieven.md) via naam en plaats. Open Archives makes people from many archives searchable by name. Use it to find someone, then look up the archive in the finding aids.

## Similar sources
- [open-archieven](https://www.opendataindex.nl/en/bron/open-archieven.md): People from records and registers of hundreds of archives, searchable by name; the National Archives describe whole archives.
- [Archieven.nl](https://www.archieven.nl): Search portal across finding aids of many regional and municipal archive services, for searches beyond central government.
- [NDE Datasetregister](https://datasetregister.netwerkdigitaalerfgoed.nl): Catalogue of heritage datasets, managed by the National Archives within the Dutch Digital Heritage Network.

## What to watch out for
- **Description only, not the content.** The finding aids describe what the archives contain. You only see the documents themselves where scans exist. The METS file of the Batavia aldermen's court holds only images (JPEG) and JSON-LD, no text layer; the National Archives do handwriting recognition separately in their Datalab.
- **No history of changes.** earliestDatestamp is 26 February 2024 and each finding aid only has the date of its last change. How often it was updated before is not visible.
- **Many separate files.** The Walkate collection finding aid is 24 kB, the Batavia aldermen's court 68 kB; each METS file with scans comes on top (116 kB for the aldermen's court example). Harvest at a gentle pace, 50 identifiers per page.
- **Not everything is open.** 2.8 percent of the finding aids are not open data because third parties made them. Archives with personal data may also be (partly) closed; the finding aid says so.

## API (OAI-PMH 2.0 (EAD), METS, IIIF)

- Base: https://service.archief.nl/gaf/oai/!open_oai.OAIHandler
- Access: No key or account needed (tested)
- Formats: xml, EAD 2002, RDF/XML (EDM), METS, JPEG, IIIF info.json
- Size: 7442 finding aids (EAD records) in OAI-PMH, plus 1,199,153 records in oai_dc (16 Oct 2026) (tested)
- Filtering: Only the OAI-PMH filters: metadataPrefix, set and a from/until date window. No content search; do that after harvesting.; metadataPrefix, set, from, until

### Endpoints
- `GET ?verb=Identify`: About the service: earliestDatestamp 2024-02-26, granularity YYYY-MM-DDThh:mm:ssZ, deleted records transient.
- `GET ?verb=ListMetadataFormats`: oai_ead (finding aids) and oai_dc (single objects, mostly photographs, as RDF with EDM classes).
- `GET ?verb=ListSets`: Sets: one per access number (7,442) plus EAD_ALL; 50 per page.
- `GET ?verb=ListIdentifiers&metadataPrefix=oai_ead&from=…&until=…`: Access numbers and datestamps changed in a period; total in completeListSize.
- `GET ?verb=GetRecord&metadataPrefix=oai_ead&identifier={toegangsnummer}`: One complete finding aid in EAD (e.g. 2.21.205.69, 24 kB; 1.04.18.03 Batavia aldermen's court, 68 kB).
- `GET ?verb=ListRecords&metadataPrefix=oai_dc&set={set}`: Single objects (photo records) with creator, rights and image addresses; identifier as NL-HaNA_<set>_<uuid>.
- `GET https://service.archief.nl/gaf/api/mets/v1/{uuid}`: METS file of one inventory number with scans: the addresses of the individual images (/api/file/v1/default/{uuid}).
- `GET https://service.archief.nl/iip/…/{file-uuid}.jp2/info.json`: IIIF Image API 3.0 for an image (dimensions, tiles); the address is given as nao:webserviceIIIF in the oai_dc record.

### Parameters
- `verb`: Identify, ListMetadataFormats, ListSets, ListIdentifiers, ListRecords, GetRecord (case-sensitive). (platform)
- `metadataPrefix`: oai_ead or oai_dc. (tested)
- `identifier`: oai_ead: the access number (2.21.205.69). oai_dc: NL-HaNA_<set>_<uuid>. An access number with oai_dc returns idDoesNotExist. (tested)
- `from / until`: Modification date, YYYY-MM-DDThh:mm:ssZ. Since 1 Oct 2026: 274 finding aids (oai_ead) and 662,979 records (oai_dc). (tested)
- `set`: Access number (1.04.18.03) or EAD_ALL; for oai_dc a collection code such as 2-20-46ntfoto. (tested)
- `resumptionToken`: Next page; valid for one hour (expirationDate). Empty element = last page. (tested)

### Elements in the responses (selection) (10)
`header/identifier` tekst, `header/datestamp` datetime, `header/setSpec` tekst, `ead/eadheader/filedesc/titlestmt/titleproper` tekst, `archdesc/did/unitdate` tekst, `c/did/unitid` tekst, `c/did/unittitle` tekst, `c/dao/@href` url, `nao:Recordaggregatie / dct:creator` uri, `edm:hasView / nao:webserviceIIIF` url

### Limits and pitfalls
- 50 records or identifiers per page; the resumptionToken expires after one hour. (tested)
- No documented rate limit and no robots.txt on service.archief.nl (404). Harvest at a gentle pace. (tested)
- With the header Accept: text/xml the service returns HTTP 406, even though the response is XML. Send Accept: */* or omit the header. (tested)
- The address contains an exclamation mark (!open_oai.OAIHandler): put it in single quotes in the shell. (tested)
- oai_dc is not what the name suggests: 1.2 million single objects (mostly photographs) as RDF with EDM classes, with images via IIIF. Not the same records as the finding aids. (tested)
- Errors come as OAI error codes with HTTP 200 (idDoesNotExist, noRecordsMatch). Always check for an <error> element. (tested)
- Each record only has the date of its last change; earliestDatestamp is 26 February 2024, earlier history is not available. (tested)

### Example
```
https://service.archief.nl/gaf/oai/!open_oai.OAIHandler?verb=ListIdentifiers&metadataPrefix=oai_ead&from=2026-10-01T00:00:00Z&until=2026-10-02T00:00:00Z
```

## How to fetch it

### curl
```bash
curl 'https://service.archief.nl/gaf/oai/!open_oai.OAIHandler?verb=GetRecord&metadataPrefix=oai_ead&identifier=2.21.205.69'
```

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

oai = "https://service.archief.nl/gaf/oai/!open_oai.OAIHandler"
r = requests.get(oai, params={"verb": "ListIdentifiers", "metadataPrefix": "oai_ead",
                              "from": "2026-10-01T00:00:00Z"})
print(re.search(r'completeListSize="(\d+)"', r.text).group(1), "inventarissen bijgewerkt")
for ident, datum in re.findall(r"<identifier>([^<]+)</identifier><datestamp>([^<]+)", r.text)[:5]:
    print(ident, datum)
```

## 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.


## Examples with real figures (1)

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

- **National Archives finding aids by year of last change: 2024 is the largest part, 58% in October 2026** (oktober 2026). Table OAI-PMH ListIdentifiers (oai_ead). [Example](https://www.opendataindex.nl/en/voorbeeld/nationaal-archief-laatste-wijziging)
  - `https://service.archief.nl/gaf/oai/!open_oai.OAIHandler?verb=ListIdentifiers&metadataPrefix=oai_ead`
  - `https://service.archief.nl/gaf/oai/!open_oai.OAIHandler?verb=ListIdentifiers&metadataPrefix=oai_ead&from=2024-01-01T00:00:00Z&until=2024-12-31T23:59:59Z`
  - `https://service.archief.nl/gaf/oai/!open_oai.OAIHandler?verb=ListIdentifiers&metadataPrefix=oai_ead&from=2025-01-01T00:00:00Z&until=2025-12-31T23:59:59Z`
