303.525 datasets geïndexeerd1.419 uitgevers
Open Data IndexDe index van open data over Nederland
Bronnen›Verkeer en vervoer

OV-data via het NDOV-loket

Het NDOV-loket verzamelt de dienstregelingen en actuele ritinformatie van de Nederlandse vervoerders, van Arriva en Connexxion tot GVB, RET en NS. Stichting OpenGeo draait het loket onder de naam GOVI en zet de data als CC0 open: dienstregelingen in NeTEx, het haltebestand en live posities en vertragingen. Er is ook een kant-en-klare GTFS-versie voor heel Nederland.

Verkeer en vervoerOpenDownloadRealtimeNederland · halte, rit en voertuig
Actueel · bijgewerkt minder dan een uur geleden · gecontroleerd 17:23
govi.nu
Schermafbeelding van govi.nu

Bussen, trams en metro's met een live positie, per vervoerder: het meest Qbuzz (39 voertuigen), dan Connexxion en EBS

Bussen, trams en metro's met een live positie, per vervoerder, oktober 2026, in voertuigen. Totaal: 95; de grootste 7 van 7 categorieën staan in de grafiek. Qbuzz is 41% van het totaal. Momentopname van zondag 25 oktober 2026 om 03:33: bus, tram en metro met een live positie. Treinen staan in een apart bestand.

Bron: NDOV-loket via openOV, GTFS-Realtime voertuigposities · opgehaald 25 oktober 2026Open de tabel Los blok

Wat je ermee kunt bouwen2

Wat kun je ermee?4 ideeën

Om te beginnen

Hoe ver is de dichtstbijzijnde halte?

Leg de haltes uit de GTFS-dienstregeling op een kaart met adressen of buurten. Tel per buurt hoeveel haltes er binnen 400 meter liggen en hoe vaak daar per uur iets vertrekt.

Om te beginnen

Live kaart van alle bussen

Het bestand met voertuigposities wordt doorlopend vernieuwd. Op 15 oktober 2026 rond half elf 's avonds stonden er 1.658 voertuigen in.

Voor gevorderden

Welke lijnen rijden het vaakst te laat?

Sla de trip updates een paar weken op en vergelijk verwachte met geplande tijden. Voor een langere periode levert Stichting OpenGeo op aanvraag historische voertuigdata, volgens de FAQ ruim tien jaar.

Voor gevorderden

Wat verdwijnt er uit de dienstregeling?

Vergelijk de NeTEx- of GTFS-dienstregeling van nu met die van een jaar eerder. Tel per gemeente de ritten die er niet meer zijn.

Zo verwerk je het5 stappen

  1. Begin met GTFS

    openOV zet de NDOV-data om naar GTFS voor heel Nederland. Het zip-bestand is groot: 251 MB op 14 oktober 2026. Vraag eerst met een HEAD-verzoek de Last-Modified op en download alleen als er iets nieuws is.

    curl -I https://gtfs.ovapi.nl/nl/gtfs-nl.zip
  2. Live posities en vertragingen

    In dezelfde map staan GTFS-Realtime-bestanden in protobuf: vehiclePositions.pb (posities), tripUpdates.pb (verwachte tijden), alerts.pb en trainUpdates.pb.

    https://gtfs.ovapi.nl/nl/vehiclePositions.pb
  3. De brondata in NeTEx en het haltebestand

    data.ndovloket.nl is een open map. Onder netex/ staat per vervoerder een dagelijks NeTEx-bestand, onder haltes/ het centrale haltebestand (CHB) als gezipte XML.

    https://data.ndovloket.nl/
  4. Realtime uit de bron via ZeroMQ

    Wie de ruwe stromen wil (KV6-posities, KV17-ritwijzigingen, NS InfoPlus, SIRI), abonneert zich via ZeroMQ op een envelop zoals /ARR/KV6posinfo. Best effort, maximaal één verbinding per afnemer per stroom.

    tcp://pubsub.besteffort.ndovloket.nl:7658
  5. Wees zuinig

    openOV vraagt je te laten zien wie je bent in de User-Agent, If-Modified-Since te gebruiken en gzip aan te zetten. Dienstregelingen veranderen zelden vaker dan eens per dag; de nieuwe dienstregeldag begint om 03:00 UTC.

Interessante koppelingen

Vergelijkbare bronnen

  • NS reisinformatie

    Alleen de trein, via de API van NS zelf, met een sleutel. Wel storingen, drukte en materieel.

  • OVapi en openOV nog niet uitgelegd

    De GTFS- en GTFS-Realtime-bestanden op deze pagina komen hiervandaan, gemaakt uit de NDOV-data door Bliksem Labs.

Waar je op moet letten

  • Best effort, geen garantie

    De open stromen hebben geen service-afspraak. Wie een gegarandeerde verbinding wil, tekent een gebruikersovereenkomst met GOVI. Technische ondersteuning is er niet; vragen gaan naar de OpenOV Discord.

  • Niet elke vervoerder levert alles

    Volgens GOVI leveren de grote vervoerders gepland en actueel, maar van bijvoorbeeld FlixBus, de Westerschelde Ferry en Duitse vervoerders is er alleen een dienstregeling. Kijk in het overzicht op de datasetpagina.

  • Geen historie in de open bestanden

    De realtime-bestanden tonen alleen het nu. Wie punctualiteit wil meten, moet zelf opslaan of historische data aanvragen.

  • Doe je niet voor als vervoerder

    De openOV-licentie staat alles toe, behalve zeggen dat je een van de vervoerders vertegenwoordigt. Fouten in de data meld je op ovdata.nl.

APIGTFS / GTFS-RT (protobuf), NeTEx-bestanden en REST (JSON) · gelezen 16 okt 2026

StandaardGTFS / GTFS-RT (protobuf), NeTEx-bestanden en REST (JSON)documentatie
Toegang zonder sleutel

Geen sleutel of account voor de bestanden, GTFS-RT en v0.ovapi.nl. Wel een herkenbare User-Agent (gebruiksregel van openOV). Een gegarandeerde realtime-verbinding vraagt een getekende NDOV-gebruikersovereenkomst. getest

Omvang1.439

voertuigen in vehiclePositions.pb, van 8 vervoerders (16 okt 2026, 23:36) getest

Formaten

gtfs (zip)protobufnetex (xml.gz)json

Basisadres

https://gtfs.ovapi.nl/nl

Endpoints 6

  • GET/gtfs-nl.zipDienstregeling van heel Nederland in GTFS (241 MB; dagelijks, laatst 16 okt 2026 18:58 UTC). Bevat o.a. stops.txt (7 MB), routes.txt, trips.txt (75 MB), stop_times.txt (1,17 GB uitgepakt), shapes.txt (289 MB), calendar_dates.txt, transfers.txt en feed_info.txt.
  • GET/vehiclePositions.pbGTFS-Realtime: positie van elk rijdend voertuig met rit, halte en vertraging (192 kB, elke minuut nieuw).
  • GET/tripUpdates.pbGTFS-Realtime: verwachte aankomst- en vertrektijden per rit en halte (1,9 MB).
  • GET/trainUpdates.pbGTFS-Realtime voor treinen, met gepland en actueel spoor (1,3 MB).
  • GET/alerts.pbGTFS-Realtime: storingen en mededelingen (461 kB).
  • GET/archive/Oudere GTFS-bestanden per datum (NL-JJJJMMDD.gtfs.zip, 170–210 MB elk, vanaf 1 januari 2026).

De API's van deze bron 3 · uit de documentatie van de aanbieder uit de beschrijving

NDOV-loket open map (bron in NeTEx)

De brondata zoals vervoerders die aanleveren, CC0. Gewone bestandsmap, geen robots.txt.

https://data.ndovloket.nl
  • GET/netex/<vervoerder>/NeTEx-dienstregeling per vervoerder (arr, cxx, ebs, gvb, htm, keolis, qbuzz, ret …), bv. GVB 4,6 MB gezipt per week
  • GET/haltes/ExportCHB_<datum>.xml.gzCentraal Haltebestand (CHB), dagelijks, 13 MB; plus PassengerStopAssignmentExportCHB (1,0 MB)
  • GET/ns/Dienstregeling NS (ns-latest.zip, 9,1 MB) en stationsgegevens
  • GET/tarieven/Tarieven per vervoerder
  • GET/docs/Koppelvlakdocumentatie (KV78Turbo, InfoPlus, BISON …)

Realtime via ZeroMQ (best effort)

Ruwe realtime-stromen; abonneren op een envelope zoals /ARR/KV6posinfo. Hoogstens één verbinding per afnemer per stroom; misbruik leidt tot een blokkade.

tcp://pubsub.besteffort.ndovloket.nl
  • SUB:7658BISON KV6 (posities), KV15 (berichten), KV17 (ritwijzigingen) per vervoerder
  • SUB:7817KV78Turbo (verwachte doorkomsttijden)
  • SUB:7664NS InfoPlus (o.a. DVS vertrektijden, treinposities)
  • SUB:7666SIRI

OVapi KV78Turbo (REST, JSON)

Verwachte vertrektijden per halte, lijn of rit als JSON, gemaakt uit KV78Turbo. Alleen http (https geeft een certificaatfout). Ondersteunt gzip.

http://v0.ovapi.nl
  • GET/tpc/{TimingPointCode}Haltegegevens en de komende ~20 doorkomsten (Passes) met verwachte en geplande tijden; meerdere codes met komma's
  • GET/tpc/Alle 38.395 haltecodes (125 kB gezipt)
  • GET/stopareacode/{code}Alle haltes in een haltegebied; /stopareacode/ geeft er 4.595
  • GET/line/{lijn}Lijn met haltes en actuele ritten, bv. GVB_24_1; /line/ geeft er 4.164
  • GET/journey/{rit}Eén rit met alle haltes, bv. GVB_20261016_24_51324_0

Filteren getest

Geen querytaal: de feeds zijn hele bestanden voor heel Nederland. Filter zelf op agency, route of stop_id. Bij v0.ovapi.nl kies je een halte, lijn of rit in het pad.

Parameters 3

If-None-Match / If-Modified-SinceGebruiksregel van openOV: vraag alleen opnieuw op als er iets veranderd is. Ongewijzigd geeft 304 zonder inhoud (getest op gtfs-nl.zip).getest
Accept-Encodinggzip; verplicht volgens de gebruiksregels van openOV, ook nuttig bij v0.ovapi.nl.uit de beschrijving
User-AgentZeg wie je bent, met contactgegevens; zo kan openOV zonder registratie werken.uit de beschrijving

Velden in GTFS-RT, GTFS en v0.ovapi.nl (selectie) 9

NaamTypeBetekenis
entity.idtekstDatum:vervoerder:lijn:rit, bv. 2026-10-16:CXX:M340:242 (vehiclePositions)
vehicle.trip.trip_id / route_id / start_datetekstRit in de GTFS-dienstregeling; koppel met trips.txt
vehicle.position.latitude / longitudegetal · graden WGS84Positie van het voertuig
vehicle.stop_id / current_stop_sequence / current_statustekstHalte waar het voertuig is of naartoe rijdt
vehicle.timestampinteger · Unix-tijd (s)Tijdstip van de positie
ovapi_vehicle_position.delayinteger · sVertraging bij de volgende halte; negatief = te vroeg (OVapi-uitbreiding)
ExpectedDepartureTime / TargetDepartureTimedatetime · lokale tijdVerwachte en geplande vertrektijd (v0.ovapi.nl, Passes)
TripStopStatustekstStatus van de doorkomst, bv. DRIVING (v0.ovapi.nl)
stop_id / stop_name / stop_lat / stop_lontekstHaltes in stops.txt (GTFS)

Limieten en valkuilen

  • Geen snelheidslimiet gedocumenteerd, wel spelregels: herkenbare User-Agent, If-Modified-Since/If-None-Match, gzip. Dienstregelingen veranderen zelden vaker dan dagelijks; de nieuwe dienstregeldag begint om 03:00 UTC. uit de beschrijving
  • ZeroMQ: maximaal één verbinding per afnemer per stroom, best effort, zonder service-afspraak. uit de beschrijving
  • v0.ovapi.nl vraagt in de wiki om meerdere objecten in één aanroep te bundelen (komma's) en niet dezelfde haltes in een kort interval af te tappen; wie veel wil, draait KV78Turbo zelf. uit de beschrijving
  • GTFS-RT is protobuf, geen JSON. Lees het met gtfs-realtime-bindings (Python, Node) en het .proto-bestand van OVapi voor de extra velden; zonder bibliotheek kan het ook met een eenvoudige varint-lezer. getest
  • Geen treinen in vehiclePositions: op 16 okt 2026 23:36 stonden er alleen CXX, ARR, QBUZZ, GVB, EBS, RET, HTM en KEOLIS in. Treinen staan in trainUpdates.pb (zonder posities). getest
  • Het GTFS-bestand is groot (241 MB, stop_times 1,17 GB uitgepakt). Vraag eerst met HEAD de Last-Modified of ETag op. In de hoofdmap staan ook govi (deels, met KV8) en openov-nl (zonder AVV en Thalys). getest
  • Halte-coördinaten in /stopareacode/ van v0.ovapi.nl zijn niet altijd goed: Papendrecht, Pieter Zeemanlaan stond op 47,97 N 3,31 O (in Frankrijk). Neem coördinaten uit het CHB of de GTFS-stops. getest
  • De wiki van v0.ovapi.nl noemt nog de oude GOVI-licentie (niet langer dan 30 minuten bewaren); de NDOV-data zelf zijn inmiddels CC0. Bij twijfel: bewaar de bronbestanden van data.ndovloket.nl. uit de beschrijving
  • Geen robots.txt op gtfs.ovapi.nl, data.ndovloket.nl en v0.ovapi.nl (404). getest

Probeer het HTTP 200 · 371 ms · 16 okt

http://v0.ovapi.nl/tpc/30005071
{
  "30005071": {
    "Stop": {
      "Longitude": 4.8918076,
      "Latitude": 52.37493,
      "TimingPointTown": "unknown",
      "TimingPointName": "Dam",
      "TimingPointCode": "30005071",
      "StopAreaCode": null
    },
    "Passes": {
      "NL_20261016_24_51324_0": {
        "IsTimingStop": false,
        "DestinationName50": "Centraal Station",
        "DataOwnerCode": "NL",
        "OperatorCode": "GVB",
        "FortifyOrderNumber": 0,
        "TransportType": "TRAM",
        "Latitude": 52.37493,
        "Longitude": 4.8918076,
        "JourneyNumber": 51324,
        "JourneyPatternCode": 1868939642,
        "LocalServiceLevelCode": 20261016,
        "LineDirection": 1,
        "OperationDate": "2026-10-16",
        "TimingPointCode": "30005071"
      },
      "NL_20261016_2_5068_0": {
        "IsTimingStop": false,
        "DestinationName50": "Centraal Station",
        "DataOwnerCode": "NL",
        "OperatorCode": "GVB",
        "FortifyOrderNumber": 0,
        "TransportType": "TRAM",
        "Latitude": 52.37493,
        "Longitude": 4.8918076,
        "JourneyNumber": 5068,
        "JourneyPatternCode": 1504650659,
        "LocalServiceLevelCode": 20261016,
        "LineDirection": 1,

Ingekort antwoord, opgeslagen bij het oogsten. Klik op het adres voor het echte, actuele antwoord.

Gelezen uit openOV: herkomst van de GTFS-feeds, licentie en gebruiksregels (User-Agent, If-Modified-Since, gzip) · Protobuf-uitbreidingen van OVapi op GTFS-Realtime (vertraging, perron, realtime_trip_id) · NDOV-loket: realtime via ZeroMQ, poorten en envelopes per vervoerder · Wiki van de KV78Turbo-API op v0.ovapi.nl (haltes, lijnen, ritten). Labels: uit de beschrijving staat in wat de api zelf publiceert. getest uit onze eigen kleine aanroep. platform geldt voor elk api van dit platform, volgens de documentatie. ervaring zelf ondervonden bij het bouwen van open data index.

Zo haal je het op

curl -sI https://gtfs.ovapi.nl/nl/vehiclePositions.pb

Meer in dit thema

Bekijk hoe deze pagina is opgebouwd
bron: ndov-ov-data
blokken: []
secties:
  - ideeen
  - verwerken
  - koppelingen
  - vergelijkbaar
  - beperkingen
  - code
cache:
  tag: bron:ndov-ov-data
  ververs: na statuscheck, als de bron nieuwer is
statuscheck:
  methode: Last-Modified van de GTFS-Realtime voertuigposities (gtfs.ovapi.nl)
  verwacht: elke minuut

Bron: content/bronnen/ndov-ov-data.yaml · Markdown