FAQ

Frequently asked questions about Trackser Live

General

What is Trackser Live?

Trackser Live is the custom data backend that powers the Trackser app. It fetches live train data from TfL's TrackerNet XML feeds every minute, enriches it with direction inference, stall detection, reformation tracking, and Metropolitan line timetable data, then publishes compact gzip-compressed JSON snapshots to Cloudflare R2. The app reads those snapshots rather than calling TfL directly.

How is this different from querying TfL directly?

TfL's TrackerNet feed is detailed but raw — it contains inconsistencies, duplicates, ambiguous direction codes, depot movement noise, and edge cases that accumulate quickly in production. Trackser Live handles all of that server-side, so the app receives clean, enriched data without having to do any of the heavy lifting on-device.

Specifically, Trackser Live adds: reliable direction inference, EWMA-based stall detection, reformation detection, destination cleansing, Metropolitan line stopping pattern resolution from working timetable data, and per-train journey tracking across the railway day.

How current is the data?

Snapshots are built every minute. TfL's TrackerNet updates approximately every 30 seconds per station. Under normal conditions, the data you receive will be 0–90 seconds old. Every response includes an as_of timestamp so you know exactly when the snapshot was built.

Which lines are supported?

All 11 Underground lines are fully supported, plus Chiltern Railways trains that share Metropolitan line track:

metropolitan · chiltern · bakerloo · central · circle · district · hammersmith-city · jubilee · northern · piccadilly · victoria · waterloo-city

Data & accuracy

Why is a train's location sometimes vague — "between stations"?

TrackerNet reports train positions using track circuit codes. When a train is between stations, we resolve the code to the nearest inter-station description (e.g. "Approaching Knightsbridge" or "Left Acton Town"). Occasionally the data doesn't contain enough information to be more precise than "between [Station A] and [Station B]" — we report the best available information rather than guess.

What does "stalled" mean?

A stalled train (isMaybeStalled: true) is one that has been at the same location longer than the EWMA threshold — approximately five minutes beyond normal dwell time for that location. Not all stalls indicate a problem: a train sitting at a terminus waiting for its next departure time will typically trigger this flag.

Stall state persists overnight to avoid false positives for trains stabled at depots.

What is train "reformation"?

Reformation (isReformed: true) is detected when a train's vehicle ID or set number changes while the train is stationary. This can happen when train sets are split, joined, or reconfigured during service — or when a train number is reassigned to a different physical unit. Reformation events are logged for analysis.

What is the Leading Car Number?

The vehicleId field is the leading car number — the identifier of the physical train unit (stock set) working that service, as opposed to the operational train number. On lines where this data is available from TrackerNet, it lets you identify which fleet vehicle is operating a given service. This is what the Trackser app displays as "Leading Car Number."

What happens if TfL's API goes down?

If TrackerNet becomes unavailable, the worker enters exponential backoff and continues serving the most recent cached snapshot. The as_of timestamp will indicate stale data. Status updates appear on the system status page. Where available, the Unified API is used as a fallback data source.

API access

Can I get API access?

Currently, Trackser Live serves the Trackser app exclusively and API keys aren't issued publicly. If you have a project that would genuinely benefit from this data, get in touch — if there's enough interest, external access is something we'd consider.

What are the rate limits?

Rate limits are set per API key depending on use case. In general, the data is updated once per minute — there's rarely a good reason to poll more frequently than that. A 429 response means you've exceeded your limit; implement exponential backoff and contact us if you need higher limits.

How fast are responses?

Live data endpoints serve pre-built snapshots from Cloudflare R2, edge-cached globally. Responses are typically under 100ms. The API itself does almost no computation per request — it's essentially a very fast file read.

Support

I've found a data accuracy issue

Include the timestamp (from as_of), the line ID, and the train number in your report. Email support@curiosity175.co.uk. Position mapping issues on specific track circuits are the most common cause — these are usually fixable with a location data update.

My question isn't here

Email support@curiosity175.co.uk and we'll get back to you. Technical questions about the data or infrastructure are always welcome.