Background Mobile

How to Make an App Like Moovit

logistics and supply chain/
September 14, 2026
How to Make an App Like Moovit

Public transit is messy. Schedules change, buses run late, metro lines close for maintenance, and riders are left guessing. Moovit solved that guessing game for more than 1.7 billion users across 3,400+ cities by turning fragmented transit data into a single, readable journey plan. If you're planning to build something similar, this guide walks through what it actually takes — the features, the data, the architecture, the costs, and the pitfalls.

What Moovit Actually Does

Before writing a line of code, it helps to be precise about the product. Moovit is not just a map. It's a multimodal trip planner that combines:

  • Scheduled public transit (bus, metro, tram, ferry, rail)
  • Real-time vehicle positions and arrival predictions
  • Walking directions to and from stops
  • Micromobility options (bike share, scooters, ride-hailing)
  • Crowdsourced service reports from riders
  • Live navigation with "get off here" alerts

The magic isn't any single feature. It's the stitching — turning a dozen disconnected transport operators into one coherent answer to "how do I get from A to B right now?"

Step 1: Pick Your Niche and Launch City

The single biggest mistake teams make is trying to launch globally. Moovit took years and a large crowdsourcing community to reach its coverage. You cannot match that on day one.

Better approaches:

Strategy Why It Works
Single-city depth Own one metro area with better data than anyone
Underserved regions Tier-2/3 cities where Google Maps transit is thin
Vertical focus Campus shuttles, corporate transport, airport transfers
Operator white-label Build for a transit authority that already owns the data

Pick a city where transit data is available (or obtainable), the ridership is high, and existing apps are weak.

Step 2: Solve the Data Problem First

This is the part that kills most transit apps. Your app is only as good as your data.

Static Schedule Data (GTFS)

GTFS (General Transit Feed Specification) is the industry standard. A GTFS feed is a zip of CSV files describing:

  • agency.txt — the operator
  • routes.txt — bus/train lines
  • trips.txt — individual runs of a route
  • stop_times.txt — arrival/departure at each stop
  • stops.txt — geocoded stop locations
  • shapes.txt — the drawn path on the map
  • calendar.txt — which days a service runs

Sources include Mobility Database, Transitland, OpenMobilityData, and direct downloads from transit agency developer portals.

Real-Time Data (GTFS-RT)

GTFS-Realtime is a Protocol Buffers feed with three message types:

  • TripUpdates — delays and predicted arrival times
  • VehiclePositions — live GPS of each vehicle
  • ServiceAlerts — disruptions, detours, closures

Not every agency publishes GTFS-RT. Some offer SIRI, some offer proprietary APIs, and some offer nothing at all.

When There Is No Data

For cities with informal transit (matatus, jeepneys, minibuses), you may need to create the data. Moovit built a community of "Mooviters" who mapped routes manually. Options:

  • Crowdsource route mapping with in-app tools
  • Hire local surveyors to ride and record routes
  • Infer routes from anonymized rider GPS traces
  • Partner directly with operators

Budget real time and money for this. Data acquisition is often 30–40% of the total effort.

Step 3: Core Feature Set

MVP Features

Journey Planning Enter origin and destination, get ranked route options with departure times, transfers, walking segments, and total duration.

Live Arrivals Show the next departures at a given stop, ideally with real-time countdowns and confidence indicators.

Nearby Stops Auto-detect location and surface everything within walking distance.

Line Browser Let users explore a route end to end, see all stops, and check timetables.

Service Alerts Push notifications for disruptions on saved lines.

Favorites and Saved Places Home, work, frequent stops — one-tap access.

Phase Two Features

  • Live navigation with vibration alerts before your stop
  • Multimodal blending (walk + scooter + train + bus)
  • Offline mode with cached schedules and maps
  • Crowding indicators based on rider reports or operator data
  • Accessibility routing for step-free journeys
  • Fare calculation and integrated ticketing
  • Carbon savings tracker
  • Trip history and commute insights

Step 4: The Routing Engine

This is your technical core. You have two paths.

Use an Existing Engine

Engine Notes
OpenTripPlanner (OTP2) Java, mature, supports GTFS + OSM, RAPTOR-based
Valhalla C++, great for multimodal and offline tiles
Navitia Python/C++, used by several European operators
MOTIS Fast, modern, strong RAPTOR implementation
GraphHopper Good routing, transit support via extension

For most teams, OpenTripPlanner 2 is the pragmatic choice. It's battle-tested, handles GTFS-RT updates, and has a GraphQL API.

Build Your Own

Only do this if you have a genuine reason. If you do, the algorithms to know are:

  • RAPTOR — Round-bAsed Public Transit Optimized Router; fast, no graph needed
  • CSA — Connection Scan Algorithm; simple and very fast for dense timetables
  • Transfer Patterns — precomputed patterns for sub-millisecond queries at scale
  • Multi-criteria Pareto search — optimize time, transfers, walking distance, and cost simultaneously

Plain Dijkstra or A* on a time-expanded graph will not scale to a large city with real-time updates.

Step 5: Architecture

Suggested Stack

Mobile Clients

  • Flutter or React Native for cross-platform speed
  • Native Swift/Kotlin if you need deep background location and battery optimization

Maps and Rendering

  • Mapbox or MapLibre GL for vector tiles and custom styling
  • Google Maps SDK if you want familiarity over customization
  • OpenStreetMap data for walking network and geocoding

Backend

  • Node.js/NestJS or Go for API gateway
  • Java (OTP) or C++ for the routing service
  • Python for data pipelines and ML predictions

Data Layer

  • PostgreSQL + PostGIS for spatial queries and stop data
  • Redis for real-time vehicle positions and prediction caching
  • ClickHouse or BigQuery for analytics and historical delay data
  • S3/GCS for GTFS archives and map tiles

Infrastructure

  • Kubernetes for the routing fleet (routing is CPU-heavy and bursty)
  • Kafka or Pub/Sub for the real-time ingestion pipeline
  • CDN for tiles and static schedule bundles

The Real-Time Pipeline

Agency GTFS-RT feeds
        ↓
  Poller / Ingest workers (every 15–30s)
        ↓
  Normalizer (map to internal IDs, validate)
        ↓
  Kafka topic: vehicle.positions / trip.updates
        ↓
  ┌─────────────┬──────────────┬─────────────┐
  Redis cache   Prediction ML   Historical store
  (live reads)  (ETA refine)    (analytics)
        ↓
  API layer → WebSocket / polling → App

Poll intervals matter. Too frequent and you get rate-limited; too slow and your predictions go stale. 15–30 seconds is typical.

Better ETAs with Machine Learning

Raw GTFS-RT predictions are often naive. You can beat them by training on your own historical data using features like:

  • Time of day and day of week
  • Historical dwell time at each stop
  • Current traffic conditions
  • Weather
  • Upstream delay propagation
  • Vehicle type and driver patterns

Gradient boosting models (XGBoost, LightGBM) work well here and are cheap to serve. A 20% improvement in arrival accuracy is genuinely felt by users.

Step 6: UX That Actually Works on a Platform

Transit apps are used one-handed, in a hurry, in bad light, with poor signal. Design accordingly.

Principles worth following:

  • Answer first, details second. The screen should open with "Next 47 in 3 min."
  • Big tap targets. People are walking.
  • Color-code by line, not by your brand. Riders think in line colors.
  • Show confidence. Distinguish "scheduled" from "live" clearly.
  • Design for offline. Underground stations have no signal. Cache aggressively.
  • Minimize input. Predict destinations from time of day and history.
  • Accessibility is not optional. Screen reader labels, high contrast, step-free filters.

The best transit apps feel like a glance, not a session.

Step 7: Monetization

Model Description Viability
Advertising Location-aware ads, sponsored placements Proven at scale, needs volume
Premium subscription Ad-free, offline maps, advanced alerts Modest but steady
Data licensing Anonymized OD matrices to cities and planners High margin, this is Moovit's real business
B2B SaaS White-label apps for transit authorities Strong for early revenue
Ticketing commission Cut of fares sold in-app Requires operator partnerships
MaaS partnerships Referral fees from ride-hail and micromobility Easy to bolt on

Note that Moovit was acquired by Intel for roughly $900M largely because of its data, not its ad revenue. The mobility intelligence layer is where the value concentrates.

Step 8: Cost and Timeline

Rough estimates for a competent build, single city, iOS + Android + backend:

Phase Duration Ballpark Cost
Discovery, data audit, UX 4–6 weeks $15k–$30k
MVP (planner, live arrivals, alerts) 4–6 months $60k–$140k
Real-time pipeline + ML ETAs 2–3 months $40k–$80k
Multimodal + ticketing 3–4 months $50k–$100k
Multi-city expansion Ongoing $10k–$25k per city

Ongoing infrastructure for a mid-sized city typically runs $2k–$8k/month, scaling with routing query volume and map tile usage.

Common Pitfalls

Underestimating data ops. Feeds break. Agencies change stop IDs without warning. You need monitoring, validation, and someone whose job is data health.

Ignoring battery drain. Continuous location tracking during live navigation will destroy a phone's battery if done naively. Use significant-change location APIs, geofences, and adaptive polling.

Trusting real-time blindly. Some agency feeds are worse than the printed schedule. Measure feed accuracy per operator and fall back when confidence is low.

Launching too wide. Ten cities with mediocre data lose to one city with excellent data.

Skipping the walking network. A route that says "transfer in 2 minutes" is useless if the transfer requires a 6-minute walk between platforms. Model pedestrian paths properly with OSM.

No feedback loop. Let users report wrong times, missing stops, and cancelled service. It's free data and it builds community.

Compliance and Legal

  • Check the license on every GTFS feed — some prohibit commercial use
  • Location data triggers GDPR and CCPA obligations; minimize, anonymize, and be explicit in consent flows
  • Accessibility regulations (ADA, EN 301 549) may apply, especially for government-adjacent products
  • Map data licensing: OSM requires attribution under ODbL; commercial tile providers have their own terms
  • If you handle ticketing, you're now in payments — PCI DSS scope

A Realistic Roadmap

Months 0–2: Data audit, city selection, agency conversations, UX prototype Months 2–6: MVP with static routing, live arrivals, one city, closed beta Months 6–9: Real-time pipeline, ML predictions, public launch Months 9–14: Multimodal integrations, offline mode, second and third cities Months 14+: Ticketing, B2B dashboard, data licensing conversations

Final Thoughts

Building an app like Moovit is less a mapping problem and more a data logistics problem. The routing algorithms are solved and open source. The map rendering is a commodity. What separates a great transit app from a dead one is whether the data is accurate, fresh, and complete — and whether you've earned the trust of riders who need to catch a bus in four minutes.

Start narrow. Get one city genuinely right. Build the data operations muscle early. The expansion becomes mechanical once the machine works.

Have a project in mind? Contact Sodio Technologies to discuss your requirements and explore the right technology solution for your business.

/// Work with us

Talk to the engineers who'd build it

You'll get a technical scope, timeline and cost estimate from the people doing the work, not an account manager. In-house team, no subcontracting, since 2016.

Contact Us