Chemins de fer de Provence: Nice – Digne

Live delays Timetables

Live delays and timetables of Chemins de fer de Provence: Nice – Digne in France, recorded since 5 Oct 2026 from data published on data.gouv.fr and proxy-data.zou.maregionsud.fr, which the archive converts to GTFS-RT and GTFS.

The metre-gauge Nice – Digne line, run for the Sud region. Its live delays come from the region's ZOU! feed.

Download

Pick a day on the calendar. Each day is one file with everything recorded that day, in France local time. You choose the format on the next page: a spreadsheet (CSV, opens in Excel, LibreOffice or Google Sheets) or Parquet (a compact table format for code).

‹ October 2026

November 2026

Delays of Chemins de fer de Provence: Nice – Digne in November 2026. Days with a file are links.
MonTueWedThuFriSatSun
1
2 3 Wednesday 4 November 2026: still being collected 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
  • A file to download
  • Incomplete: recorded for part of the day only, or far fewer trains than usual
  • Collected, file ready after 02:15 UTC
  • Today, still being collected
  • No data

30 days ready to download. The archive has data for this source since 5 Oct 2026.

Several days at once

Choose the first and last day: you get one zip with a file per day.

File type

The timetable

The planned timetable: stations, routes, trips and times. It comes as GTFS, the standard timetable format, one Parquet table per GTFS file. 9 versions stored, a new one when Chemins de fer de Provence: Nice – Digne changes the coming week’s trains.

All versions as Parquet tables

Tools that need a GTFS zip: pip install gtfs-parquet, then gtfs_parquet.write_gtfs(gtfs_parquet.read_parquet(folder), "gtfs.zip") on a folder of the tables. This version was stored on 2 Nov 2026, 15:23 and is the current one.

Accounts are free: you sign in with a code sent to your email, no password.

Use it from code

Every day is a Parquet file at a fixed address. Read it straight from DuckDB, Polars or anything that reads Parquet over HTTP: only the columns and rows your query needs are downloaded. You need a free API token from an account.

Try it in your browser Developer guide

Source id
fr-cfp
Services
TripUpdate live delays: daily files from 5 Oct 2026 to 3 Nov 2026 (30 days)
Daily file
https://data.train-archive.eu/daily/provider=fr-cfp/service=TripUpdate/date=YYYY-MM-DD.parquet final delays per train and stop
Every update
https://data.train-archive.eu/provider=fr-cfp/service=SERVICE/date=YYYY-MM-DD/day.parquet
Today
Still being collected in 15-minute files. The day’s file is built after 02:15 UTC. The developer guide shows how to read the 15-minute files.
Timetables
Service static: 9 versions, listed in fr-cfp/static/latest.json
Live delays on 14 Oct 2026, with DuckDB
INSTALL httpfs; LOAD httpfs;

-- The final delay of each train at each stop, in minutes: the 20 largest
SELECT route, stop_name, scheduled_arrival, arrival_delay_min, delay_source
FROM read_parquet('https://data.train-archive.eu/daily/provider=fr-cfp/service=TripUpdate/date=2026-10-14.parquet?token=YOUR_TOKEN')
WHERE trip_status = 'scheduled'
ORDER BY arrival_delay_min DESC NULLS LAST
LIMIT 20;
The same, in Python with Polars
import polars as pl

token = "YOUR_TOKEN"
day = pl.read_parquet(f"https://data.train-archive.eu/daily/provider=fr-cfp/service=TripUpdate/date=2026-10-14.parquet?token={token}")

# The final delay of each train at each stop, in minutes: the 20 largest
print(
    day.filter(pl.col("trip_status") == "scheduled")
    .select("route", "stop_name", "scheduled_arrival", "arrival_delay_min", "delay_source")
    .sort("arrival_delay_min", descending=True, nulls_last=True)
    .head(20)
)
Or save the file, with curl
curl -L -o fr-cfp-TripUpdate-2026-10-14.parquet \
  'https://data.train-archive.eu/daily/provider=fr-cfp/service=TripUpdate/date=2026-10-14.parquet?token=YOUR_TOKEN'

Replace YOUR_TOKEN with one of your API tokens. Delays are in seconds in the Parquet files; the examples turn them into minutes.

Stations of the current timetable
import json, urllib.request
import polars as pl

base, token = "https://data.train-archive.eu", "YOUR_TOKEN"
latest = json.load(urllib.request.urlopen(f"{base}/fr-cfp/static/latest.json?token={token}"))
stops = pl.read_parquet(f"{base}/{latest['tables']['stops']}?token={token}")
print(stops.select("stop_id", "stop_name"))

Also: every file of this source, listed, and asking an AI assistant to query it for you.

What is covered

Local time
Europe/Paris
Rail filter
Off: the feed carries trains only
Live delays
5 Oct 2026 to 4 Nov 2026, 108 files, 10.9 MB.
73 missing hours
  • 24 Oct 2026: 06h, 07h, 08h, 09h, 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h, 21h
  • 25 Oct 2026: 06h, 07h, 08h, 09h, 10h, 11h, 12h, 13h, 14h, 15h, 16h
  • 1 Nov 2026: 06h, 07h, 10h, 11h, 16h, 17h

On a usual day the live data covers 98% of the trains the timetable plans. Incomplete days: 20 Oct 2026 (27%, part of the day), 21 Oct 2026 (96%, part of the day), 22 Oct 2026 (96%, part of the day), 23 Oct 2026 (94%, part of the day), 24 Oct 2026 (88%, part of the day), 25 Oct 2026 (88%, part of the day), 26 Oct 2026 (96%, part of the day), 1 Nov 2026 (100%, part of the day).

Feed status, live delays
Last update 21:29 on 23 Oct 2026, local time, 11 trains.
Feed status, live delays
Last update 19:48 on 4 Nov 2026, local time, 60 trains. Last error: EncodeError: Message transit_realtime.FeedMessage is missing required fields: header.gtfs_realtime_version
Timetables
9 versions stored.
  • 2 Nov 2026, 15:23 7 files, 60.0 KB current
  • 28 Oct 2026, 07:53 8 files, 68.5 KB
  • 26 Oct 2026, 07:07 7 files, 53.9 KB
  • 24 Oct 2026, 23:56 8 files, 60.8 KB
  • 21 Oct 2026, 18:21 7 files, 53.8 KB
  • 20 Oct 2026, 18:22 8 files, 63.9 KB
46 stations in the latest timetable.

Do you publish this feed? Ask for a change or its removal. Removal stops collection and deletes the files already stored.