Bus route performance

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.

Service supplied
Demand and revenue
Optional
Earnings per km (EPKM)
—
revenue ÷ vehicle-km
Load factor
—
passenger-km ÷ seat-km
Vehicle-km
—
length × trips
Km per bus
—
vehicle-km ÷ buses
Earnings per bus (EPB)
—
revenue ÷ buses
Trips per bus
—
trips ÷ buses
Passengers per trip
—
passengers ÷ trips
Fare yield
—
per passenger · per passenger-km
Cost recovery
—
EPKM ÷ cost per km
Passenger-km
—
passengers × trip length

—

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:

FieldExampleUsed for
Date, issue time2026-03-04, 08:17Day and time-of-day demand
Route number and direction/descriptionR12, “Central Station to Industrial Estate”Route and direction grouping
Vehicle / schedule numberBus 1042Fleet use, buses per route
Trip number, trip start/end timeTrip 6, 08:05–08:52Trips run, headway, speed
Origin and destination stopStop 3 → Stop 11Boardings, alightings, on-board load, OD matrix
Passengers (adult, child, concession)2 + 1Ridership
Fare and stage distance₹25, 6.4 kmRevenue, passenger-km
Ticket/pass type, conductor idCash, monthly passPayment 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

From ticket records to service decisionsFive steps: ticket records, validate, aggregate, indicators, act. Ticket records one row per ticket: date, route, trip, from/to stop, fare Validate match stops and routes, separate refunds, flag gaps Aggregate ticket → trip → route per day Indicators ridership, revenue, EPKM, load factor, headway Act frequency, fares, route changes, fleet use Each figure in a route report should trace back through these steps.
Each figure in a route report should trace back through these steps.
  1. Collect. Ticket exports (daily files or an operator API), plus the route, vehicle and stop masters.
  2. 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.
  3. Summarise. Tickets → trips (one row per bus run) → route totals per day → network totals.
  4. Compute KPIs from the summaries, always as ratios of sums (more on that below).
  5. 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.

S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 0 10 20 30 40 50 60 Passengers Max load point: 42 on board Passenger load along one trip Passengers on board Seats offered (50) Illustrative trip. Shaded area ∝ passenger-km; dashed line × route length = seat-km
Boardings minus alightings, accumulated along the stop sequence, give the on-board load. The shaded area is the trip’s passenger-km.

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.

0 200 400 600 800 1000 Boardings Demand by hour and boardings per trip 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 Hour of day 10 20 30 40 Boardings / trip Illustrative data
Time-of-day demand from ticket issue times: where boardings per trip climb, frequency is short of demand.

5. Eight checks before you trust a number

  1. Duplicates. The same ticket exported twice inflates ridership and revenue. Check ticket numbers per bus per day.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. Consistent codes. “7 A”, “7A” and “7a” are one route. Standardise spaces and case before grouping.
  7. Distance coverage. A missing fare distance is unknown, not zero. Report the share of tickets with a distance next to any passenger-km figure.
  8. 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%.

S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 0 10 20 30 40 50 60 Passengers Max load point: 42 on board Passenger load along one trip Passengers on board Seats offered (50) Illustrative trip. Shaded area ∝ passenger-km; dashed line × route length = seat-km
Load factor is the shaded area (passenger-km) divided by the seats line times the route length (seat-km).

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.

0 5 10 15 20 Passenger trip length (km) 0 100 200 300 400 500 600 700 800 Tickets Average trip length ≈ 5.7 km Passenger trip-length distribution Illustrative data
ATL hides the shape of demand; the distribution shows whether a route serves short hops or long commutes.

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):

LevelHeadwayPassenger view
A< 10 minNo need to check a timetable
B10–14 minFrequent
C15–20 minLongest wait still acceptable
D21–30 minUnattractive to choice riders
E31–60 minService available, plan around it
F> 60 minUnattractive 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.

0 200 400 600 800 1000 Boardings Demand by hour and boardings per trip 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 Hour of day 10 20 30 40 Boardings / trip Illustrative data
Where boardings per trip are low, trips can move to the peaks without losing many riders.
Before After 1,200 1,080 Vehicle-km / day Before After 30,000 29,400 Revenue / day (₹) Before After 25.0 27.2 EPKM (₹/km) Trimming 6 near-empty off-peak round trips Illustrative: −10% km, −2% revenue → EPKM +9%
Removing six near-empty off-peak round trips: −10% km, −2% revenue, EPKM +9%.

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

−7.5 −5.0 −2.5 0.0 2.5 5.0 7.5 10.0 12.5 Change in EPKM Add 10% km at half the route’s yield Cut 10% of km that carry 2% of revenue Seats per bus +10% (same load factor) Load factor +10% (same seats) Fare yield per passenger-km +10% -4.5% +8.9% +10.0% +10.0% +10.0% What moves EPKM Illustrative route: ₹35.7/km base
Because EPKM is a product of three factors, a 10% gain in any one lifts it 10%. Adding low-yield km dilutes it.
What the numbers showLikely causeLevers to try first
Full buses, low revenue per kmShort trips at flat fares, high concession share, leakageFare stages, leakage (6, 7)
Good revenue per passenger, half-empty busesToo many trips or seats for the demandTrim or short-turn (1, 2), bus size (3)
Crowded peaks, empty off-peakFlat timetable against peaked demandMove trips to the peaks (1), regularity (9)
Low demand and low yieldRoute doesn’t match where people travelRestructure, 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.