Ticket Sales App Development for Intercity Bus Operators
A bus operator's revenue does not end at the seat, it ends at departure time: a seat unsold at that moment can never be sold again. And if most of your sales come through ticket platforms and agencies, you lose commission on every seat and you never find out who the passenger is or which route they travel regularly. Your own app closes both gaps at once.
How many separate apps does this need?
-
01
Passenger mobile app (iOS + Android)
Trip search, seat map selection that respects gender seating rules, 3D Secure payment, e-ticket and PNR, boarding point changes, cancellation and open-ticket requests, and live bus location.
-
02
Driver and steward app
Trip-based passenger list, QR boarding scans, adding passengers who board at intermediate stops, baggage tags, break and platform notifications; it works offline on routes with no coverage and syncs once the connection returns.
-
03
Ticket office and agency panel
Terminal counters and agencies selling from the same seat inventory, cash and card collection, commission tracking, redeeming open tickets, and cancellations and refunds on the passenger's behalf.
-
04
Trip and pricing management panel
Route, departure time and bus seat layout definitions, intermediate-point fare tables, promotions and empty-seat discounts, cancellation rules, UETDS (Turkey's transport tracking system) reporting status and sales reports on a single screen.
What the app includes
- Last-minute empty-seat discount push before departure
- Open-ticket balance with expiry tracking per passenger
- Baggage tag printing and lost-bag matching by PNR
- Platform number, rest-stop location and break length alerts
- Parcel shipment on the coach with pickup code
- Student, senior and disabled fare rules per route
- Group booking that keeps seats side by side
- Shuttle pickup point matched to the departure time
- Agency commission statement and periodic reconciliation
- Route-specific promo codes with usage limits
- Bulk passenger notice and rebooking offer on cancelled runs
- Passenger rating per driver and per departure
State of the sector
Bus tickets are no longer bought at the counter, they are bought on a phone, and passengers compare price first on aggregator platforms, then seat layout and departure time. Visibility is easy in that model, but the price of visibility is commission and never owning the customer. An operator without its own channel has no one to tell when a seat is still empty two hours before departure; it cannot build campaigns for loyal passengers or announce a new route. Meanwhile, high-speed rail and cheap flights put pressure on certain corridors, and the bus network's advantage of picking up passengers at intermediate points only turns into revenue with a system that can manage boarding points and fares flexibly.
Metrics that matter here
- Seat occupancy rate per trip — An empty seat is never recovered; the app raises occupancy by pushing discounted seats via notifications on trips close to departure.
- Share of total sales through your own channel — Every seat that comes through a platform or agency costs commission; the share sold through your own app goes straight to the bottom line.
- Seat selection to payment completion rate — Most passengers get lost on the seat map; as the number of steps and the lock duration improve, this rate rises measurably.
- Cancellation and open-ticket conversion rate — By adjusting cancellation rules and balance validity from the panel and watching the effect, you can steer passengers back into travel instead of cash refunds.
Common mistakes in this sector
- Building seat inventory as a single trip leg A structure that treats a seat as simply occupied or free cannot sell to a passenger boarding at an intermediate stop. The bus runs half the route empty while the system shows the seat as closed. Inventory has to be built around boarding-alighting pairs from the start; changing it later means rewriting the fare table as well.
- Leaving counters and agencies on a separate system When the app is new but the counter stays on the old program, the same seat gets sold twice and the discrepancy surfaces on the bus. No channel can sell safely without a single inventory and timed seat locks. Agency sales should run on the same structure, with their commission tracked separately.
- Hard-coding cancellation rules Deduction rates, open-ticket validity and time-to-departure thresholds change with the season. If they are written into the code, every change means a new release and app store review. The rules should be configurable from the panel, and existing tickets should keep the rule that applied at the time of sale.
- Postponing the steward side The passenger app ships while boarding control is still done from a printed list. Then passengers who board at intermediate stops never reach the system, occupancy reports come out wrong, and the reported list does not match. The steward app has to be part of the first release.
Regulation and compliance
In intercity bus passenger transport, the passenger list must be reported before departure to the Ministry of Transport's U-ETDS system (Turkey's transport tracking system); your app has to generate that report in step with sales, cancellations and mid-route boarding changes. Operating licences and mandatory insurance obligations remain with the company itself, but must be shown correctly on the ticket. The document issued against the ticket is created in line with GİB (Turkish Revenue Administration) e-Arşiv rules and cancelled together with the ticket. Passenger identity and travel data are treated as sensitive under KVKK (Turkey's data protection law, aligned with GDPR): retention periods must be limited, and counters and agencies should only access their own transactions. Promotional SMS and email require consent recorded through İYS, Turkey's commercial message permission registry.
The real challenges in this sector
-
Seat locking and the adjacent-seat gender rule
Three channels can see the same seat at once: the app, the counter and the agency. The moment a seat is selected it is placed under a timed lock and released automatically if payment is not completed. The rule that prevents a man and a woman being seated next to each other must also be validated at lock time; otherwise two people pay simultaneously and someone gets moved out of their seat on the bus. Because the rule can vary by route and bus layout, it has to be configurable on the server side.
-
Seat inventory for mid-route boarding
On an Istanbul-Ankara service, a passenger boarding at Bolu only consumes the leg after Bolu. Treating the seat as occupied for the whole trip sends the bus out half empty; not tracking it per segment means selling the same seat twice. Inventory has to be modelled around boarding-alighting point pairs, with fares calculated per leg. On routes with busy intermediate stops, a significant share of sales comes from exactly this.
-
UETDS passenger reporting and post-departure changes
The passenger list is reported before departure, but last-minute sales, cancellations, seat changes and mid-route boarding keep changing it. The reporting flow should run through a queue, failed requests should be retried, and additions the steward makes offline should be written into the list once connectivity returns. Every trip's reporting status must be visible in the panel so the counter spots a problem before the bus leaves.
-
Cancellations, refunds and conversion to open tickets
When a ticket is cancelled the money does not always go back to the card: the deduction rate, the open-ticket balance and the validity period of that balance are each governed by separate rules. The refund at the payment provider, the cancellation of the e-Arşiv document and the return of the seat to sale must all move forward consistently in one transaction; if any one fails, the others have to be rolled back. Otherwise the seat sits empty, or a passenger who has already been refunded boards the bus.
-
Live bus location and battery trade-offs
Passengers ask where the bus is, but pulling the location continuously from the steward's phone drains the device mid-trip. Location should be taken from the vehicle's tracking device and processed on the server, with the phone only as a fallback source. The update frequency changes with speed and break status, and in tunnels and coverage gaps the last known position and estimated arrival are shown; sending every point in real time also drives up data costs.
Required integrations
- Virtual POS and 3D Secure payment infrastructure (iyzico, PayTR - Turkish payment providers - Craftgate, or a bank's own POS) with refund and partial refund support
- GİB (Turkish Revenue Administration) e-Arşiv invoicing: issuing the document that accompanies the ticket and cancelling it automatically on cancellation
- U-ETDS passenger reporting: pre-departure list submission plus cancellation and mid-route boarding updates
- Seat inventory synchronisation with ticket distribution platforms (Obilet, Biletall and similar)
- Vehicle tracking systems (GPS devices such as Arvento or Mobiliz) for live bus location and estimated arrival
- SMS/OTP providers (Netgsm, İleti Merkezi) and İYS consent registration (Turkey's commercial message permission registry) for promotional messages
Who this page is for
-
A newly founded operator running a few departures on one route
At first it is enough to sell through your own channel: seat map, payment, e-ticket and QR boarding for the attendant. An agency network and leg-based pricing are not needed yet; intermediate boarding can be handled manually. Phase 1 goes live on its own.
-
An established family company selling through a regional agency network
The critical piece is one shared seat inventory: counter, agencies and app must see the same seat, with commission and reconciliation produced automatically. Weight shifts to Phase 2, and leg-based pricing plus allotment rules belong in the first scope discussion.
-
An operator moving from tours, transfers and staff shuttles into scheduled services
The need is twofold: scheduled-service tickets on one side, full-coach charter requests, corporate accounts and group bookings on the other. Scope should not stop at seat sales; quote approval flows and corporate invoicing belong in the plan from the start.
A phased plan that splits the budget
-
1
Phase 1 — Working core for a single route 6-8 hafta
Passenger app with seat map, timed seat lock, 3D Secure payment, e-ticket and PNR lookup, offline passenger list with QR boarding for the crew, a basic schedule and fare panel, plus U-ETDS passenger reporting (Turkey's mandatory transport reporting system) and e-Arsiv documents (Turkey's e-archive invoicing). Tickets can be sold and boarded from day one.
-
2
Phase 2 — Segment inventory, ticket office and agency network 5-7 hafta
Seat inventory is split into boarding-alighting pairs with leg-based fares; the ticket office and agencies sell from the same inventory, with commission and reconciliation tracked. Cancellation, deduction and open-ticket rules move into the admin panel. It runs while Phase 1 is already selling, because the next gain is occupancy.
-
3
Phase 3 — Live tracking, parcels and loyalty 4-6 hafta
Live coach position and ETA from the vehicle tracker, platform and rest-stop alerts, parcel shipping with pickup codes, promo codes, frequent-traveller profiles, inventory sync with distribution platforms and occupancy reporting. Built first they would delay the core sales flow; built now they are shaped by real sales data.
Typical scope and timeline
A typical first release: passenger app with seat map and gender seating rules (iOS + Android), virtual POS payment and refunds, e-ticket and PNR lookup, mid-route boarding support, offline passenger list and QR boarding in the steward app, counter and agency sales screen, trip and pricing management panel, UETDS and e-Arşiv (Turkey's mandatory e-invoicing system) integrations, and app store release.
Estimated timeline: 12-18 weeks
Off-the-shelf or custom build?
| Topic | Off-the-shelf | Custom build |
|---|---|---|
| Setup speed and initial cost | A ready-made ticketing platform can start selling within a week: seat layouts, payment and store presence come prepared, which genuinely suits a company starting with one route. | Custom development takes weeks and front-loads the investment; in return there is no per-seat commission and the sales channel grows with you. |
| Intermediate stops and leg-based pricing | Off-the-shelf systems usually support intermediate boarding through a standard template, which is often enough on conventional intercity routes. | If your route has busy intermediate stops or seasonal fare gaps, the rules are written for that route: separate tariffs for short legs, priority for long ones. |
| Ticket office, agencies and existing accounting | A ready platform ships its own counter screen and agency accounts; if you keep separate accounting software, transfer usually happens through file exports. | Custom work maps agency commission rates, statement formats and the fields your accounting software expects directly, so month-end reconciliation is not done by hand. |
| Passenger data ownership and portability | Selling through a platform helps visibility and occupancy, but the passenger relationship and travel history largely stay on the platform. | In your own system PNRs, route habits and cancellation history stay with you; you set retention periods under KVKK (Turkey's data protection law) and can migrate the data elsewhere. |
Sector glossary
- PNR (booking reference)
- The booking reference attached to a ticket. Passengers quote it to change a seat, cancel, or have the counter look the ticket up; in the app it is the real key behind the QR code.
- Open ticket (travel credit)
- Instead of refunding to the card, the fare is held as time-limited credit in the passenger's account. The company avoids a cash outflow and the passenger picks a date later; expiry and transfer are rule-driven.
- Route leg (segment)
- The portion of a run between two stops. Because seats are sold leg by leg, occupancy and pricing are discussed per leg rather than per whole trip.
- Allotment (agency seat quota)
- Seats reserved in advance for an agency or channel. If unsold by a cut-off time they return to general sale; releasing them too late leaves the coach half empty.
- Muavin (onboard bus attendant)
- The onboard attendant working alongside the driver on Turkish coaches: boarding checks, baggage, break announcements and registering passengers who join at intermediate stops. Often the app's real field user.
Frequently asked questions
Let us talk about your project
A free 30-minute call to scope it out, then an itemised quote within 48 hours.
Get a Free QuoteThis page explains the problems an app must solve in this sector. We share references and comparable projects during the call.