Bus route performance
A route is performing when the kilometres it runs are carrying passengers who pay enough to justify them. The evidence is each ticket from the electronic ticketing machine. Try one route in the calculator, then use the notes below to see whether the file can be trusted, what the indicators mean, and which change is worth making.
This is for planners, operations analysts and students who have a ticket export or a one-page route summary. It will not build a timetable. Earnings per km is not a verdict until you set it next to what a kilometre costs to operate.
Try a route · Read the ticket file · Check a formula · Choose a change
EPKM and load factor calculator
Enter one route for one day (or any period — just keep every input for the same period). Results update as you type.
—
Reference bands are general planning references, not targets for any particular city: load factor < 30% low, 30–70% fair, ≥ 70% good, > 100% overcrowded; about 200–250 km per bus per day is a common planning range for full-day urban service. EPKM has no universal benchmark — compare it with cost per km.
How the calculator works
- Vehicle-km = one-way route length × one-way trips. If your route has short-turn trips, enter the average trip length instead of the full length.
- Passenger-km = passengers × average trip length. If you have passenger-km directly, divide it by passengers and enter the result.
- Load factor = passenger-km ÷ (vehicle-km × seats).
- EPKM = revenue ÷ vehicle-km, and it always equals fare yield per passenger-km × load factor × seats — the identity shown under the results.
- What-if removes trips and the revenue they carried, then recomputes EPKM. It shows why trimming near-empty trips raises EPKM and trimming busy ones does not.
Formulas, worked examples and common mistakes: bus KPI reference. Ways to raise EPKM and their trade-offs: how to increase EPKM.
From bus tickets to route performance
Every ticket a conductor issues on an electronic ticketing machine (ETM) records where a passenger got on, where they got off, what they paid and which trip they rode. Millions of those rows are the most detailed demand dataset most city bus systems have. This guide explains how those records become trips, daily route totals and the indicators planners use — and where the numbers quietly go wrong.
1. What ETM data contains
An ETM export is one row per ticket (sometimes one row per passenger). Field names differ between vendors, but almost every export carries the same core:
| Field | Example | Used for |
|---|---|---|
| Date, issue time | 2026-03-04, 08:17 | Day and time-of-day demand |
| Route number and direction/description | R12, “Central Station to Industrial Estate” | Route and direction grouping |
| Vehicle / schedule number | Bus 1042 | Fleet use, buses per route |
| Trip number, trip start/end time | Trip 6, 08:05–08:52 | Trips run, headway, speed |
| Origin and destination stop | Stop 3 → Stop 11 | Boardings, alightings, on-board load, OD matrix |
| Passengers (adult, child, concession) | 2 + 1 | Ridership |
| Fare and stage distance | ₹25, 6.4 km | Revenue, passenger-km |
| Ticket/pass type, conductor id | Cash, monthly pass | Payment mix, revenue accountability |
Two supporting tables make the ticket rows useful: a route master (route code, direction, length) and a vehicle master (bus number, type, seats). A stop sequence per route-direction, with stop coordinates, turns origin–destination pairs into a load profile and a map.
2. The five-step pipeline
- Collect. Ticket exports (daily files or an operator API), plus the route, vehicle and stop masters.
- Clean and check. Standardise route codes, match stops to the stop list, fill trip times within a trip, separate refunds from sales, and flag what cannot be matched.
- Summarise. Tickets → trips (one row per bus run) → route totals per day → network totals.
- Compute KPIs from the summaries, always as ratios of sums (more on that below).
- Decide. Frequencies, timetables, fare stages, route changes, fleet deployment.
3. Building trips and daily route totals
Most KPIs depend on getting the trip right — one bus running one direction of one route once. A trip is usually identified by date + vehicle + trip number. Its revenue and ridership are the sums of its tickets; its distance is the route-direction length; its capacity is seats × distance.
Daily route totals then add up trips, buses (distinct vehicles), revenue, ridership, passenger-km and seat-km for each route and date. Every route-level indicator is built from them.
Rule that saves most mistakes: compute ratios from sums, never by averaging ratios. Network load factor is Σ passenger-km ÷ Σ seat-km, not the mean of daily load factors — otherwise a quiet Sunday counts as much as a busy Monday.
4. The KPIs it unlocks
From tickets alone you can compute ridership, revenue, trips operated, buses in service, vehicle-km, earnings per km (EPKM), earnings per bus (EPB), average trip length, load factor, observed headway, boarding and alighting by stop, on-board load and the origin–destination matrix. The KPI formulas below gives each formula with a worked example, and the calculator above lets you try your own numbers.
5. Eight checks before you trust a number
- Duplicates. The same ticket exported twice inflates ridership and revenue. Check ticket numbers per bus per day.
- Refunds and reversals. Negative fares are not sales. Keep them in a separate column; summed with sales they can push a route’s earnings below zero.
- Master data coverage. Every route, stop and bus in the tickets should exist in the reference tables — and exist once. A reference row listed twice duplicates every trip joined to it.
- Impossible values. Route lengths of zero or less, fare distances longer than the route, more passengers on a trip than the bus can physically carry.
- Trip identity. Look at trips per bus per day and passengers per trip. Extremes usually mean trip numbers that reset or are missing, not real service.
- Consistent codes. “7 A”, “7A” and “7a” are one route. Standardise spaces and case before grouping.
- Distance coverage. A missing fare distance is unknown, not zero. Report the share of tickets with a distance next to any passenger-km figure.
- Times. Trip ends before starts, times carried over from another day, or running times taken from ticket times alone — none of these can support a speed figure.
6. What ticket data cannot tell you
- Trips that sold no ticket and dead km (depot to first stop) — they leave no ticket row.
- Schedule adherence — needs a published timetable.
- Operating cost — needs cost per km; without it, EPKM cannot say whether a route breaks even.
- Transfers and repeat riders — needs card or account ids.
- Passengers who did not pay — fare evasion is invisible in sales.
7. Adding GPS
Vehicle tracking fills the biggest gaps: the km a bus actually drove, departure and arrival times, trips run without tickets and dead runs to the depot. With GPS, EPKM can use revenue-km actually operated instead of route length × ticketed trips, and commercial speed can use real running time. Always show what share of bus-days GPS covers before comparing GPS and ticket figures.
FAQ
What is ETM data?
Records from electronic ticketing machines on buses: one row per ticket with date, time, route, trip, origin and destination stop, passengers and fare.
Can ETM data measure load factor?
Yes, if tickets carry stage distance and the vehicle master carries seats: load factor = passenger-km ÷ seat-km. Without seats, any load factor is an assumption.
Why do two reports show different EPKM for the same route?
Usually different vehicle-km: route length × trips versus GPS km, per-direction versus average route length, or ticketed trips only versus all trips operated.
How much data do I need before drawing conclusions?
At least two to four weeks, covering several of each weekday and weekend day. A single week can be distorted by a festival, a strike or a data outage.
Bus KPI formulas
Thirteen indicators city bus planners use every week, each with its formula, a worked example, the mistake that most often breaks it and — where one honestly exists — a reference value. Every example uses the same illustrative route and day, so you can check one KPI against another.
Worked example: one route, one day (illustrative)
- Route length 14 km each direction; 60 one-way trips; 4 buses; 50 seats per bus
- 2,400 passengers; revenue ₹30,000; passenger-km 14,400
- Service 06:00–21:30, 30 trips per direction; typical one-way running time 45 minutes
1. Ridership
Formula: Σ passengers on tickets (adults + children + concessions), excluding refund rows.
Example: 2,400 passengers.
Mistake: counting refund or cancellation rows as boardings, or counting a group ticket as one passenger.
2. Vehicle-km
Formula: Σ (route-direction length × trips) — multiplied for each route-direction and day, then summed.
Example: 14 km × 60 trips = 840 km.
Mistake: multiplying two totals. Over three days, Σ length (14 + 14 + 14 = 42) × Σ trips (180) = 7,560 km — three times the true 2,520 km. Multiply first, then sum.
Limit: from tickets this counts only trips that sold a ticket and ignores dead km. GPS gives the km actually driven.
3. Earnings per km (EPKM)
Formula: Σ revenue ÷ Σ vehicle-km — over the same trips.
Example: ₹30,000 ÷ 840 km = ₹35.71/km.
Mistakes:
- Revenue from routes with no known length kept in the numerator while their km are missing from the denominator — EPKM inflates.
- Refunds summed with sales — EPKM can turn negative.
- Average route length × trip count when trip lengths differ (e.g. short-turns) — the denominator is wrong.
Reference: none that is universal. EPKM only means something next to cost per km (see cost recovery) or compared across routes of the same network. How to raise EPKM is further down this page.
4. Earnings per bus (EPB)
Formula: Σ revenue ÷ bus-days (each bus counted once per day it ran).
Example: ₹30,000 ÷ 4 = ₹7,500 per bus per day.
Mistake: summing distinct buses per route — a bus that worked two routes counts twice and EPB falls.
5. Trips per bus
Formula: trips ÷ bus-days.
Example: 60 ÷ 4 = 15 one-way trips per bus.
Mistake: trip numbering errors. A trip number that restarts mid-day merges two runs; blank trip numbers can split one run into many. Look at the extremes before trusting the average.
6. Vehicle-km per bus per day
Formula: vehicle-km ÷ bus-days.
Example: 840 ÷ 4 = 210 km/bus/day.
Reference: Indian urban bus planning commonly works to roughly 200–250 km per bus per day for full-day services. Below that, buses are idle or routes too short; check your own contract or service plan for the figure that applies.
7. Load factor (LF)
Formula: Σ passenger-km ÷ Σ seat-km, where passenger-km = passengers × stage distance and seat-km = seats × vehicle-km — both over the same trips.
Example: seat-km = 840 × 50 = 42,000; LF = 14,400 ÷ 42,000 = 34.3%.
Mistakes:
- Treating a missing stage distance as zero — LF reads near 0% instead of “unknown”.
- Keeping passenger-km for trips whose capacity is unknown while dropping their seat-km — LF inflates.
- Using a default seat count silently. If capacity is assumed, label it.
Reference: Indian city-bus service plans often use around 70% as a design load factor; below about 30% a route is usually oversupplied. Treat both as planning references, not targets for every route.
8. Average trip length (ATL)
Formula: Σ passenger-km ÷ Σ passengers — counting only tickets that carry a distance.
Example: 14,400 ÷ 2,400 = 6.0 km.
Mistake: including passengers with no distance in the denominator — ATL understates by the missing share.
Reference: none. ATL reflects city form, not performance; use it for fare-stage design and passenger-km estimates.
9. Fare yield
Per passenger: revenue ÷ passengers = ₹30,000 ÷ 2,400 = ₹12.50.
Per passenger-km: revenue ÷ passenger-km = ₹30,000 ÷ 14,400 = ₹2.08.
Mistake: two reports using “fare yield” for different ratios. Name the denominator.
10. Passengers and revenue per trip
Formulas: passengers ÷ trips; revenue ÷ trips.
Example: 2,400 ÷ 60 = 40 passengers/trip; ₹30,000 ÷ 60 = ₹500/trip.
Use: by hour of day, these show where frequency lags demand — see the hourly chart in the ticket section above.
11. Observed headway
Formula: per route-direction-day, (last trip start − first trip start) ÷ (trips − 1); network figure = trip-weighted mean.
Example: 06:00 to 21:30 is 930 minutes; 930 ÷ 29 = 32 minutes per direction.
Mistake: pooling all routes (or both directions) into one clock span — parallel routes look like one frequent service and headway is understated.
Reference — service-frequency levels of service from the Transit Capacity and Quality of Service Manual (TCRP Report 100, 2nd edition):
| Level | Headway | Passenger view |
|---|---|---|
| A | < 10 min | No need to check a timetable |
| B | 10–14 min | Frequent |
| C | 15–20 min | Longest wait still acceptable |
| D | 21–30 min | Unattractive to choice riders |
| E | 31–60 min | Service available, plan around it |
| F | > 60 min | Unattractive to all riders |
Our example route, at 32 minutes, sits at level E.
12. Commercial speed
Formula: Σ route length ÷ Σ running time (trip end − trip start), dropping trips shorter than a few minutes or longer than several hours.
Example: 14 km in 45 minutes = 18.7 km/h.
Mistake: using first and last ticket times as the trip start and end. The last ticket is often sold well before the terminal, so the run looks short and speed implausibly high. Use recorded trip times or vehicle tracking.
13. Cost recovery
Formula: EPKM ÷ cost per km (CPKM), or Σ revenue ÷ Σ operating cost.
Example: with an illustrative cost of ₹55/km, ₹35.71 ÷ ₹55 = 65%.
This is the number that tells a city what the route costs it. EPKM alone cannot.
The one rule: ratios of sums
Every ratio above is computed from totals, never by averaging daily or route ratios. Two days with LF 50% (4,000 of 8,000 seat-km) and 10% (400 of 4,000) average to 30%, but the true figure is 4,400 ÷ 12,000 = 36.7%. The same applies to EPKM, ATL, fare yield and speed.
Try the formulas on your own numbers with the calculator above.
FAQ
What is a good EPKM for a city bus?
There is no single figure. Compare EPKM with cost per km: EPKM ÷ CPKM is the share of operating cost covered by fares.
What load factor should a bus route target?
Indian service plans often use about 70% as a design load factor. Peaks above 100% on the busiest section mean crowding; network averages below about 30% suggest oversupply.
Why is my vehicle-km three times too high?
Probably Σ length × Σ trips over several days. Multiply length by trips for each route and day first, then sum.
How to increase EPKM
Earnings per km (EPKM) is revenue divided by the kilometres buses run. Raising it is rarely about fares alone. Split the ratio into its parts and the levers become obvious — and so do the ways a higher EPKM can hide a worse service.
EPKM in three parts
EPKM = revenue ÷ vehicle-km. Insert passenger-km and seat-km and it factorises exactly:
EPKM = (revenue ÷ passenger-km) × (passenger-km ÷ seat-km) × (seat-km ÷ vehicle-km)
= fare yield per passenger-km × load factor × seats per bus
On an illustrative route earning ₹2.08 per passenger-km, at 34.3% load factor, with 50-seat buses: 2.08 × 0.343 × 50 = ₹35.7/km. Every lever below moves one of those three terms — or the vehicle-km underneath them. (Formulas and pitfalls: bus KPI reference.)
Lever 1 — Match frequency to demand by hour
Most routes run too many trips mid-day and late evening and too few in the peaks. Boardings per trip by hour show it directly.
Trade-off: wider off-peak headways lose riders who need the bus at those hours; keep a minimum frequency (a clock-face 20–30 minutes is a common floor).
Lever 2 — Short-turn trips at the max load point
If the on-board load peaks in the middle of a route and the outer end is nearly empty, some trips can turn back short of the terminal. The busy section keeps its frequency; empty km disappear.
Trade-off: outer-end passengers get a lower frequency; communicate the pattern clearly.
Lever 3 — Put the right size of bus on the route
Seats per bus is the third factor. Larger buses on routes that already fill raise EPKM; on half-empty routes they only lower load factor and raise cost.
Trade-off: bigger buses cost more per km — check cost recovery, not just EPKM.
Lever 4 — Remove overlaps between routes
Two routes sharing a long corridor split the same passengers and double the km. Merging, staggering or truncating one raises load factor on both.
Trade-off: some riders lose a one-seat ride; check origin–destination pairs before cutting.
Lever 5 — Serve the demand generators
Stops a few hundred metres from a hospital gate, college or market lose riders to autos and two-wheelers. Moving stops or adding a short deviation can raise boardings at almost no km cost.
Lever 6 — Align fare stages with trip lengths
Fare yield per passenger-km depends on how stages fall against actual trip lengths. If most trips end just inside a stage boundary, revenue per passenger-km is low. The trip-length distribution shows where boundaries sit against demand.
Trade-off: fare changes are policy decisions with affordability impact; model them before proposing.
Lever 7 — Close revenue leakage
Compare revenue per passenger-km across conductors, routes and times. Persistent low outliers on comparable routes point to tickets not issued. Inspection and cashless options usually recover more than fare increases.
Lever 8 — Make passes and digital tickets work for yield
Passes lock in regular riders but discount each trip; QR and card payment reduce leakage and speed boarding. Track ridership and yield per pass type together, so a discount that brings no new riders shows up.
Lever 9 — Improve regularity
Bunched buses run one full and one empty. Even headways spread the same riders across the fleet, raising load factor without new km. Headway control at terminals and priority at key junctions help most.
Lever 10 — Know which km you divide by
Dead km (depot to first stop) don’t change a revenue-km EPKM, but they do change EPKM on gross km. Before comparing cities, operators or months, state the denominator: ticketed trips × route length, scheduled km, or GPS km.
Which levers move EPKM most
| What the numbers show | Likely cause | Levers to try first |
|---|---|---|
| Full buses, low revenue per km | Short trips at flat fares, high concession share, leakage | Fare stages, leakage (6, 7) |
| Good revenue per passenger, half-empty buses | Too many trips or seats for the demand | Trim or short-turn (1, 2), bus size (3) |
| Crowded peaks, empty off-peak | Flat timetable against peaked demand | Move trips to the peaks (1), regularity (9) |
| Low demand and low yield | Route doesn’t match where people travel | Restructure, merge, move stops (4, 5) |
Guardrails
- Coverage obligations. Some routes exist for access, not revenue. Report them separately rather than cutting them to raise the average.
- Watch ridership. An EPKM gain with a ridership loss can mean riders moved to private vehicles.
- Measure fairly. Compare the same weekdays before and after, with the same km definition, and allow a few weeks for riders to adjust.
- Add cost. EPKM ÷ cost per km is the share of cost recovered — the number that matters for a city’s budget.
Model a route before and after a change with the calculator above.
FAQ
Does cutting trips always increase EPKM?
Only if the trips removed carry less revenue per km than the route average. Cutting busy trips lowers revenue faster than km.
Is a higher EPKM always better?
No. It can rise because coverage was cut or buses are overcrowded. Read it with ridership, load factor and cost recovery.
What is the difference between EPKM and EPB?
EPKM divides revenue by kilometres; EPB divides it by buses in service per day. A bus doing many short trips can have high EPB and modest EPKM.
