Methodology v1.3 · frozen on 19 September 2026 · CC BY 4.0 data

ONLY VTC Observatory methodology

This document precisely defines each indicator published on theTransport observatory : population measured, time stamps used, validity bounds, publication thresholds. It is versioned : each published edition references the methodology version that produced it, and any change of definition increments the number — a published figure therefore remains interpretable under the rules in force when it was generated.

The figures are calculated directly from our operational database (the platform's real bookings), with no manual reprocessing, by a service in read-only mode.

1. Principles

  1. Non-selection. Any indicator that reaches the sample threshold over a period is published for that period, whatever its value — including when unfavourable. An indicator may be withdrawn from an edition only for insufficient sample, never because the figure is displeasing. Selectively withdrawing a bad quarter would be a lie by omission.
  2. Sample always shown. No figure is published without its sample size ("n") visible next to it. A (sub-)category below the threshold shows "insufficient sample", never a number.
  3. No sensitive business metrics. The Observatory publishes no margins, commissions, occupancy rates, revenue or driver pay. Only indicators of service quality andactivity.
  4. No individual data. Aggregates only. No identifiable journey, customer or driver is exposed.
  5. Estimates labelled as such. "Estimated" distances and durations are route calculations made at booking, not on-board telemetry. The public label says so.

2. Common framework

ElementRule
Base populationRides with "completed" status and an end date filled in.
Time zoneEurope/Paris for any time or calendar breakdown (night, month, quarter).
Time stampsAll server, set at the moment of the action (driver, system or scheduled task). No manual re-entry after the fact.
Publication thresholdMinimum 15 rides. Any (sub-)category with n < 15 → "insufficient sample".
Central tendencyWe publish median (highlighted, robust to outliers) and mean, always accompanied by n.
Validity boundsEach time indicator has physical bounds (see §3). Any value outside the bounds is excluded from the calculation and reduces the published n.
Immediate vs bookedScheduled pick-up more than 30 min after the request ⇒ booked in advance ; otherwise immediate request. Business threshold validated (2026-07).
Arrival milestone (source)For the punctuality and thewait, arrival at the pick-up point is the time stamp measured on the server side by geofence, not the driver's tap. The public v2 series restarts on 4 August 2026 (00:00 UTC), with measurement version and trigger radius frozen at 120 m. The 9 exploratory v1 observations remain in the database for audit but are excluded from statistics.
Trigger before acceptance of the approach journeyA geofence entry occurring while the ride is merely "accepted" is valid only if it takes place no more than 45 min before the scheduled time. Beyond that, the measurement is kept in the database but invalid for public statistics.
Minimum coverage (geofence)A geofence-sourced indicator is published only if the exact measured/population ratio covers ≥ 80 % of its population. Rounding to one decimal is reserved for display and never decides publication. Below this threshold, the value remains "—", with n/15 progress and coverage published; from n ≥ 15, the summary already measured is shown in a note, labelled provisional — never as the main value nor in exports.

2.1. Justified exclusions

ReasonRationale
Uncompleted ridesNo measurable end of ride.
Incomplete time stampsThe milestone required by the indicator is missing → time cannot be calculated.
Automatic closuresEnd of ride set by the system (up to +6 h) — does not reflect the actual end.
Closures forced by an operatorAdministrative, not operational, end.
Chauffeur hireThe duration is the hired duration; it would skew A→B journey statistics.
Early departuresApproach started more than 45 min before the scheduled time: measures the driver's safety margin, not their approach journey.

Chauffeur hire and automatic/forced closures are counted in the public "exclusions" block of the exports. Other exclusions specific to each indicator are visible through its n, always published with the value or its progress.

3. Indicators — definitions down to the time stamp

Milestones in a ride's life cycle (all server time-stamped): request → driver acceptance → driver departure ("on the way") → arrival at the pick-up point → pick-up (customer on board) → end of ride. Added to these is thescheduled pick-up time, set at booking.

3.0. Publication status (v1.3)

Verified in production on 28 July 2026 (read-only inspection script, versioned in our repository): the progress milestones entered by the driver (arrival, pick-up, end) are partly tapped in a burst at drop-off. Across 127 rides with complete milestones, the arrival → pick-up gap has a median of 10 seconds (48.8% under 10 s) and 21% of rides have arrival/departure/end within 2 minutes. The driver's "arrived" tap therefore marks boarding (or even drop-off), not arrival at the meeting point : it does not measure what it claims to measure.

Collection fix v2 (series active from 4 August 2026, 00:00 UTC): arrival at the pick-up point is measured on the server side by geofence at a frozen public radius of 120 m, and versioned at first trigger. On this consistent source, punctuality and immediate-request waiting time are reactivated from 15 valid measurements and only if the exact coverage ratio reaches 80%. Still suspended: the approach time and the durations. Any reactivation applies the non-selection principle (§1): once the threshold is reached, the indicator is published every period, including when unfavourable — a "98% on time" from this same source would be published just as a bad figure would.

IndicatorDefined onv1.3
Acceptance timerequest → acceptance (action in the app)✅ published
Share accepted in under 60 srequest → acceptance (action in the app)✅ published (v1.3)
Advance booking lead timerequest → scheduled pick-up✅ published (v1.3)
Estimated distanceroute estimate at booking✅ published
Long-distance share (> 50 km)route estimate at booking✅ published (v1.3)
Airport / night / advance / B2B / assistance sharesbooking fields✅ published
Pick-up municipalitiesdeparture address✅ published (v1.3, aggregates n ≥ 15 per municipality)
Driver cancellations after acceptancestatus and author of cancellation, on accepted rides✅ published (v1.3, series since 4 June 2026)
Monthly / cumulative volumecount✅ published
Immediate-request waitrequest → arrival measured by geofence✅ published from n ≥ 15 and exact coverage ≥ 80%
Punctualityarrival measured by geofence vs scheduled time✅ published from n ≥ 15 and exact coverage ≥ 80%
Approach timedriver departure → arrival⏸ suspended
Journey / airport transfer durationpick-up → end of ride⏸ suspended
Estimated / actual gapactual distance and duration⏸ suspended (not collected)

3.1. Times

IndicatorFrom → toMeasured populationValid bounds
Customer wait (immediate request)request → arrival measured by geofenceimmediate requests completed after the v2 switch, arrival measured automatically0 – 360 min
Approach time (suspended)driver departure → arrivalbooked in advance only0.5 – 180 min
Acceptance timerequest → acceptancerides broadcast to drivers only0 – 7 days
Advance booking lead time (v1.3)request → scheduled pick-uprides booked in advance only0.5 h – 180 days

Thecustomer wait is the full time experienced by the customer, including the driver search — for a ride booked in advance the customer does not "wait": the driver comes for the agreed time. The approach time is not published for immediate requests: the driver app automatically starts the approach on acceptance, so the measured "approach journey" would be the acceptance→arrival time, already contained in the published wait — redundant and systematically inflated. The acceptance time excludes direct dispatch assignments: almost instant, they do not measure a driver's decision — without this exclusion, the figure would become uninterpretable. Published next to the median (v1.3) is the share accepted in under 60 seconds — same population, same n. The advance booking lead time (v1.3) measures how far ahead the customer orders: an immediate request has no chosen lead time (the scheduled time is set by the system) → excluded; the median is highlighted, as the distribution is very spread out (from a few hours to several weeks).

3.2. Journey

The estimated distance (road route calculated at booking, excluding chauffeur hire, bounds 0.5 – 500 km) is published. The actual journey duration and the airport transfer duration are suspended: defined on the pick-up → end-of-ride milestones, which are bunched together (see §3.0). Sample note: estimated distance is filled in on only some completed rides (assistance imports and older bookings lack it) — these indicators therefore reach the threshold of 15 later than time indicators. This is an accepted consequence of the threshold, not an editorial choice.

3.3. Punctuality

Booked in advance only — an immediate request has no promised time.

3.4. Activity shares

Denominator = base population of the period, unless otherwise stated in the rule. Published only if the denominator ≥ 15.

ShareRule
AirportPlace type "airport" recorded at departure or arrival; failing that, analysis of the address (Saint-Exupéry, airport, LYS…).
Night (7 p.m. – 7 a.m.)Pick-up time scheduled between 7 p.m. and 7 a.m., Paris time (see §4).
Booked in advanceScheduled pick-up more than 30 min after the request (see §2).
B2BRide linked to a business account. Non-exclusive category: an assistance mission may also be B2B. Both shares use total completed rides as denominator and do not add up.
SupportMission linked to an assistance case or partner.
Long distance (v1.3)Distance estimated at booking above 50 km. Own denominator : rides with a valid estimated distance (0.5 – 500 km, excluding chauffeur hire) — the same population as the distance statistic (see §3.2). Published to one decimal: the share is small and whole-number rounding would distort it.

3.5. Ride volume

Monthly volume : number of rides completed per calendar month (Europe/Paris), over the last 6 months — the current month is marked "in progress" (partial volume). Period / cumulative volume : see §5.

3.6. Suspended indicators — awaiting reliable collection

Suspended = defined (above) but not shown on the page or in exports, as long as the underlying data is unreliable. The definition remains frozen so that reactivation is unambiguous.

Cause A — unreliable driver milestones (measured on 28 July 2026): arrival, pick-up and end milestones are partly entered in a block at drop-off. The contamination is biased in one direction only — it inflates waiting and approach, compresses duration — so a median calculated on 80% clean data and 20% data shifted in the same direction is displaced, not "robust". Lifted in v1.2 thanks to the geofence: immediate wait and punctuality (they depended only on arrival). Still suspended: approach time (depends on the "on the way" tap), journey and airport transfer durations (depend on pick-up and end taps).

Cause B — data not collected : actual distance and duration travelled are not captured by the driver app (0 rides filled in out of 191 checked). Suspended on this basis: the estimated / actual gap.

Reactivation rules (strict) :

3.7. Pick-up municipalities (v1.3)

3.8. Driver cancellations after acceptance (v1.3)

The indicator answers a specific customer question: once my ride is accepted, can the driver let me down?

4. Night and pricing

The 7 p.m. – 7 a.m. (Europe/Paris) split is not arbitrary: it is the "night" pricing period of the price engine of the platform. Verified in production on 28 July 2026, a night surcharge per kilometre is active (from +17% to +27% depending on the range). Classifying the night share by the time scheduled is therefore consistent with the fare actually applied to the customer. The public promise is the price fixed at booking, known in advance — not the absence of a night scale.

5. Editions and versioning

Editions by calendar quarter (e.g. "2026-T3", Europe/Paris): an edition's metrics are calculated on rides completed during that quarter. A re-issue after closure receives a separate URL (for example /observatoire/2026-t3-v2), with its own exports. The initial edition keeps its URL and figures. An archive = a frozen edition — that is what makes a primary source, not a brochure. An accepted consequence: at the start, several quarterly sub-categories show "insufficient sample". This is a feature (§1), not a flaw.

Cumulative "since the start" edition displayed as the showcase on /observatoire : consolidated figures (time coverage indicated), regenerated and republished automatically every day — publication safeguards (n ≥ 15, coverage ≥ 80%) apply at each recalculation.

Life cycle : a quarterly edition is generated as a draft (idempotent recalculation), then published manually. A published quarterly edition is immutable and references the methodology version that produced it.

6. Publishing

7. Limitations and biases (publicly displayed)

8. Reproducibility

All the definitions above are implemented in our backend calculation service (read-only, direct aggregations on the operational database) and covered by automated tests versioned with the code. Bounds, thresholds and exclusions are named constants there, matching this document. Journalists and researchers: to discuss the methodology or detailed data, write to contact@onlyvtc.fr.

9. Version log

VersionDateChanges
1.0 28 July 2026 Initial frozen version. Publication threshold raised to 15. Published: acceptance time, estimated distance, activity shares, volumes. Suspended (defined, not shown): immediate wait, approach time, punctuality, durations — driver milestones bunched at drop-off (measured in production on 28/07); estimated/actual gap — not collected. Reactivation only after collection is made reliable at the source, on later data, with a version increment — never by after-the-fact filtering.
1.1 29 July 2026 Reactivation of punctuality and immediate-request waiting time on the arrival milestone measured on the server side by geofence, without a driver tap. Dated break: calculation only on rides completed after the switch to automatic measurement, never applied retroactively. Publication conditional on coverage ≥ 80%, with the coverage rate published next to each indicator.
1.2 3 August 2026 New geofence v2 series from 4 August 2026 (00:00 UTC): the 9 exploratory v1 observations are kept for audit but excluded. Measurement version and 120 m radius frozen at first trigger; trigger before acceptance valid only within the 45 min before the scheduled time. Coverage compared on the exact ratio before rounding. Below n = 15 or coverage < 80%, the page shows "—", the n/15 progress and coverage. Addendum of 7 September 2026 (no existing definition changed) : publication of the average extent of delays next to the rate; from n ≥ 15 below the coverage threshold, the measured summary is shown in a note as a provisional figure (main value "—", exports unchanged).
1.3 19 September 2026 Five indicators added, no existing definition changed. (1) Driver cancellations after acceptance (§3.8): population = accepted rides, series since 4 June 2026 (reliability of the cancellation author, audited on the full history on 19 September 2026) — the only indicator classified by acceptance date. (2) Advance booking lead time (§3.1): request → scheduled pick-up, booked in advance only, bounds 0.5 h – 180 days. (3) Long-distance share > 50 km (§3.4): own denominator = rides with a valid estimated distance, one decimal. (4) Share accepted in under 60 s (§3.1): same population as the acceptance time. (5) Pick-up municipalities (§3.7): extracted from the departure address, aggregates only, threshold of 15 applied per municipality, no cross-tabulation published. Associated collection fix: driver cancellation now records its author on the booking itself (previously only in the internal event log).

Licence and citation

Observatory data is published under the licence CC BY 4.0 : cite "ONLY VTC Observatory — onlyvtc.fr/observatoire". Full citation instructions are on the Observatory page.